Bjorn Helgaas 8f38eaca55 PCI: fix P2P bridge I/O port window sign extension
On P2P bridges with 32-bit I/O decoding, we incorrectly sign-extended
windows starting at 0x80000000 or above.  In "base |= (io_base_hi << 16)",
"io_base_hi" is promoted to a signed int before being extended to an
unsigned long.

This would cause a window starting at I/O address 0x80000000 to be
treated as though it started at 0xffffffff80008000 instead, which
should cause "no compatible bridge window" errors when we enumerate
devices using that I/O space.

The mmio and mmio_pref casts are not strictly necessary, but without
them, correctness depends on the types of the PCI_MEMORY_RANGE_MASK and
PCI_PREF_RANGE_MASK constants, which are not obvious from reading the
local code.

Found by Coverity (CID 138747 and CID 138748).

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
2012-06-20 17:28:53 -06:00
..
2012-05-26 12:22:27 -07:00
2012-05-26 12:42:29 -07:00
2012-05-24 16:22:53 -04:00
2012-05-31 08:46:50 +02:00
2012-05-26 13:05:55 -07:00
2012-05-26 12:42:29 -07:00
2012-05-23 14:07:06 -07:00
2012-05-22 16:02:13 -07:00
2012-05-22 16:02:13 -07:00
2012-05-14 13:37:45 -07:00
2012-05-29 16:22:32 -07:00
2012-06-06 09:49:28 -07:00
2012-05-26 12:42:29 -07:00
2012-05-29 11:53:11 -07:00
2012-06-07 15:22:21 +03:00
2012-05-22 16:02:13 -07:00
2012-05-29 11:53:11 -07:00
2012-05-30 08:49:28 -07:00
2012-05-31 12:02:41 -07:00
2012-05-26 13:05:55 -07:00
2012-05-16 12:46:37 -04:00
2012-05-26 12:42:29 -07:00
2012-06-01 16:57:51 -07:00
2012-05-26 12:42:29 -07:00
2012-05-22 16:34:21 -07:00
2012-05-26 12:22:27 -07:00