From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Li Ming <ming4.li@intel.com>
Cc: <bhelgaas@google.com>, <ira.weiny@intel.com>,
<linux-pci@vger.kernel.org>
Subject: Re: [PATCH V2 1/1] PCI/DOE: Fix maximum data object length miscalculation
Date: Wed, 16 Nov 2022 09:37:10 +0000 [thread overview]
Message-ID: <20221116093710.00002091@Huawei.com> (raw)
In-Reply-To: <20221116015637.3299664-1-ming4.li@intel.com>
On Wed, 16 Nov 2022 09:56:37 +0800
Li Ming <ming4.li@intel.com> wrote:
> The value of data object length 0x0 indicates 2^18 dwords being
> transferred. This patch adjusts the value of data object length for the
> above case on both sending side and receiving side.
>
> Besides, it is unnecessary to check whether length is greater than
> SZ_1M while receiving a response data object, because length from LENGTH
> field of data object header, max value is 2^18.
>
> Signed-off-by: Li Ming <ming4.li@intel.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Thanks,
> ---
> v1->v2:
> * Fix the value of PCI_DOE_MAX_LENGTH
> * Moving length checking closer to transferring process
> * Add a missing bracket
> * Adjust patch description
> ---
> drivers/pci/doe.c | 20 ++++++++++++++++----
> 1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/pci/doe.c b/drivers/pci/doe.c
> index e402f05068a5..66d9ab288646 100644
> --- a/drivers/pci/doe.c
> +++ b/drivers/pci/doe.c
> @@ -29,6 +29,9 @@
> #define PCI_DOE_FLAG_CANCEL 0
> #define PCI_DOE_FLAG_DEAD 1
>
> +/* Max data object length is 2^18 dwords */
> +#define PCI_DOE_MAX_LENGTH (1 << 18)
> +
> /**
> * struct pci_doe_mb - State for a single DOE mailbox
> *
> @@ -107,6 +110,7 @@ static int pci_doe_send_req(struct pci_doe_mb *doe_mb,
> {
> struct pci_dev *pdev = doe_mb->pdev;
> int offset = doe_mb->cap_offset;
> + size_t length;
> u32 val;
> int i;
>
> @@ -123,15 +127,20 @@ static int pci_doe_send_req(struct pci_doe_mb *doe_mb,
> if (FIELD_GET(PCI_DOE_STATUS_ERROR, val))
> return -EIO;
>
> + /* Length is 2 DW of header + length of payload in DW */
> + length = 2 + task->request_pl_sz / sizeof(u32);
> + if (length > PCI_DOE_MAX_LENGTH)
> + return -EIO;
> + if (length == PCI_DOE_MAX_LENGTH)
> + length = 0;
> +
> /* Write DOE Header */
> val = FIELD_PREP(PCI_DOE_DATA_OBJECT_HEADER_1_VID, task->prot.vid) |
> FIELD_PREP(PCI_DOE_DATA_OBJECT_HEADER_1_TYPE, task->prot.type);
> pci_write_config_dword(pdev, offset + PCI_DOE_WRITE, val);
> - /* Length is 2 DW of header + length of payload in DW */
> pci_write_config_dword(pdev, offset + PCI_DOE_WRITE,
> FIELD_PREP(PCI_DOE_DATA_OBJECT_HEADER_2_LENGTH,
> - 2 + task->request_pl_sz /
> - sizeof(u32)));
> + length));
> for (i = 0; i < task->request_pl_sz / sizeof(u32); i++)
> pci_write_config_dword(pdev, offset + PCI_DOE_WRITE,
> task->request_pl[i]);
> @@ -178,7 +187,10 @@ static int pci_doe_recv_resp(struct pci_doe_mb *doe_mb, struct pci_doe_task *tas
> pci_write_config_dword(pdev, offset + PCI_DOE_READ, 0);
>
> length = FIELD_GET(PCI_DOE_DATA_OBJECT_HEADER_2_LENGTH, val);
> - if (length > SZ_1M || length < 2)
> + /* A value of 0x0 indicates max data object length */
> + if (!length)
> + length = PCI_DOE_MAX_LENGTH;
> + if (length < 2)
> return -EIO;
>
> /* First 2 dwords have already been read */
next prev parent reply other threads:[~2022-11-16 9:37 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-16 1:56 [PATCH V2 1/1] PCI/DOE: Fix maximum data object length miscalculation Li Ming
2022-11-16 9:37 ` Jonathan Cameron [this message]
2022-11-16 9:44 ` Lukas Wunner
2022-11-16 18:02 ` Bjorn Helgaas
2022-11-16 18:07 ` Bjorn Helgaas
2022-11-16 18:56 ` Lukas Wunner
2022-11-16 20:29 ` Bjorn Helgaas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221116093710.00002091@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=bhelgaas@google.com \
--cc=ira.weiny@intel.com \
--cc=linux-pci@vger.kernel.org \
--cc=ming4.li@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.