PCI/DOE: Fix maximum data object length miscalculation
authorLi Ming <ming4.li@intel.com>
Wed, 16 Nov 2022 01:56:37 +0000 (09:56 +0800)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 16 Nov 2022 20:26:46 +0000 (14:26 -0600)
commita4ff8e7a71601321f7bf7b58ede664dc0d774274
tree2cd4205f4d6d9fd8837b54e82f753c9b1dca02f3
parent9abf2313adc1ca1b6180c508c25f22f9395cc780
PCI/DOE: Fix maximum data object length miscalculation

Per PCIe r6.0, sec 6.30.1, a data object Length of 0x0 indicates 2^18
DWORDs (256K DW or 1MB) being transferred.  Adjust the value of data object
length for this case on both sending side and receiving side.

Don't bother checking whether Length is greater than SZ_1M because all
values of the 18-bit Length field are valid, and it is impossible to
represent anything larger than SZ_1M:

  0x00000    256K DW (1M bytes)
  0x00001       1 DW (4 bytes)
  ...
  0x3ffff  256K-1 DW (1M - 4 bytes)

[bhelgaas: commit log]
Link: https://lore.kernel.org/r/20221116015637.3299664-1-ming4.li@intel.com
Fixes: 9d24322e887b ("PCI/DOE: Add DOE mailbox support functions")
Signed-off-by: Li Ming <ming4.li@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Lukas Wunner <lukas@wunner.de>
Cc: stable@vger.kernel.org # v6.0+
drivers/pci/doe.c