mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
	akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
	"Darrick J. Wong" <djwong@us.ibm.com>,
	Muli Ben-Yehuda <muli@il.ibm.com>,
	FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
	Joerg Roedel <joerg.roedel@amd.com>,
	Yinghai Lu <yhlu.kernel@gmail.com>,
	"Jon D. Mason" <jdmason@kudzu.us>,
	Corinna Schultz <coschult@us.ibm.com>,
	Ingo Molnar <mingo@elte.hu>
Subject: [32/90] x86, Calgary IOMMU quirk: Find nearest matching Calgary while walking up the PCI tree
Date: Wed, 16 Dec 2009 17:14:43 -0800	[thread overview]
Message-ID: <20091217011602.051155536@mini.kroah.org> (raw)
In-Reply-To: <20091217011835.GA20434@kroah.com>

2.6.31-stable review patch.  If anyone has any objections, please let us know.

------------------

From: Darrick J. Wong <djwong@us.ibm.com>

commit 4528752f49c1f4025473d12bc5fa9181085c3f22 upstream.

On a multi-node x3950M2 system, there's a slight oddity in the
PCI device tree for all secondary nodes:

 30:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1)
  \-33:00.0 PCI bridge: IBM CalIOC2 PCI-E Root Port (rev 01)
     \-34:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 1078 (rev 04)

...as compared to the primary node:

 00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1)
  \-01:00.0 VGA compatible controller: ATI Technologies Inc ES1000 (rev 02)
 03:00.0 PCI bridge: IBM CalIOC2 PCI-E Root Port (rev 01)
  \-04:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 1078 (rev 04)

In both nodes, the LSI RAID controller hangs off a CalIOC2
device, but on the secondary nodes, the BIOS hides the VGA
device and substitutes the device tree ending with the disk
controller.

It would seem that Calgary devices don't necessarily appear at
the top of the PCI tree, which means that the current code to
find the Calgary IOMMU that goes with a particular device is
buggy.

Rather than walk all the way to the top of the PCI
device tree and try to match bus number with Calgary descriptor,
the code needs to examine each parent of the particular device;
if it encounters a Calgary with a matching bus number, simply
use that.

Otherwise, we BUG() when the bus number of the Calgary doesn't
match the bus number of whatever's at the top of the device tree.

Extra note: This patch appears to work correctly for the x3950
that came before the x3950 M2.

Signed-off-by: Darrick J. Wong <djwong@us.ibm.com>
Acked-by: Muli Ben-Yehuda <muli@il.ibm.com>
Cc: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: Joerg Roedel <joerg.roedel@amd.com>
Cc: Yinghai Lu <yhlu.kernel@gmail.com>
Cc: Jon D. Mason <jdmason@kudzu.us>
Cc: Corinna Schultz <coschult@us.ibm.com>
LKML-Reference: <20091202230556.GG10295@tux1.beaverton.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 arch/x86/kernel/pci-calgary_64.c |   12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

--- a/arch/x86/kernel/pci-calgary_64.c
+++ b/arch/x86/kernel/pci-calgary_64.c
@@ -318,13 +318,15 @@ static inline struct iommu_table *find_i
 
 	pdev = to_pci_dev(dev);
 
+	/* search up the device tree for an iommu */
 	pbus = pdev->bus;
-
-	/* is the device behind a bridge? Look for the root bus */
-	while (pbus->parent)
+	do {
+		tbl = pci_iommu(pbus);
+		if (tbl && tbl->it_busno == pbus->number)
+			break;
+		tbl = NULL;
 		pbus = pbus->parent;
-
-	tbl = pci_iommu(pbus);
+	} while (pbus);
 
 	BUG_ON(tbl && (tbl->it_busno != pbus->number));
 



  parent reply	other threads:[~2009-12-17  1:40 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-17  1:18 [00/90] 2.6.31.9-stable review Greg KH
2009-12-17  1:14 ` [01/90] USB: option: add pid for ZTE Greg KH
2009-12-17  1:14 ` [02/90] USB: usb-storage: fix bug in fill_inquiry Greg KH
2009-12-17  1:14 ` [03/90] firewire: ohci: handle receive packets with a data length of zero Greg KH
2009-12-17  1:14 ` [04/90] ALSA: hda - Terradici HDA controllers does not support 64-bit mode Greg KH
2009-12-17  1:14 ` [05/90] ALSA: hrtimer - Fix lock-up Greg KH
2009-12-17  1:14 ` [06/90] ath5k: allow setting txpower to 0 Greg KH
2009-12-17  1:14 ` [07/90] ath5k: enable EEPROM checksum check Greg KH
2009-12-17  1:14 ` [08/90] bsdacct: fix uid/gid misreporting Greg KH
2009-12-17  1:14 ` [09/90] debugfs: fix create mutex racy fops and private data Greg KH
2009-12-17  1:14 ` [10/90] devpts_get_tty() should validate inode Greg KH
2009-12-17  1:14 ` [11/90] futex: Take mmap_sem for get_user_pages in fault_in_user_writeable Greg KH
2009-12-17  1:14 ` [12/90] hfs: fix a potential buffer overflow Greg KH
2009-12-17  1:14 ` [13/90] hrtimer: Fix /proc/timer_list regression Greg KH
2009-12-17  1:14 ` [14/90] jbd2: dont wipe the journal on a failed journal checksum Greg KH
2009-12-17  1:14 ` [15/90] KVM: s390: Make psw available on all exits, not just a subset Greg KH
2009-12-17  1:14 ` [16/90] md/bitmap: protect against bitmap removal while being updated Greg KH
2009-12-17  1:14 ` [17/90] pata_hpt{37x|3x2n}: fix timing register masks (take 2) Greg KH
2009-12-17  1:14 ` [18/90] [ARM] pxa/em-x270: fix usb hub power up/reset sequence Greg KH
2009-12-17  1:14 ` [19/90] ssb: Fix range check in sprom write Greg KH
2009-12-17  1:14 ` [20/90] SUNRPC: IS_ERR/PTR_ERR confusion Greg KH
2009-12-17  1:14 ` [21/90] USB: Close usb_find_interface race v3 Greg KH
2009-12-17  1:14 ` [22/90] USB: musb_gadget_ep0: fix unhandled endpoint 0 IRQs, again Greg KH
2009-12-17  1:14 ` [23/90] USB: option.c: add support for D-Link DWM-162-U5 Greg KH
2009-12-17  1:14 ` [24/90] USB: usb-storage: add BAD_SENSE flag Greg KH
2009-12-17  1:14 ` [25/90] USB: usbtmc: repeat usb_bulk_msg until whole message is transfered Greg KH
2009-12-17  1:14 ` [26/90] V4L/DVB: Fix test in copy_reg_bits() Greg KH
2009-12-17  1:14 ` [27/90] x86: Add new Intel CPU cache size descriptors Greg KH
2009-12-17  1:14 ` [28/90] x86/amd-iommu: attach devices to pre-allocated domains early Greg KH
2009-12-17  1:14 ` [29/90] x86/amd-iommu: un__init iommu_setup_msi Greg KH
2009-12-17  1:14 ` [30/90] x86, apic: Enable lapic nmi watchdog on AMD Family 11h Greg KH
2009-12-17  1:14 ` [31/90] x86: ASUS P4S800 reboot=bios quirk Greg KH
2009-12-17  1:14 ` Greg KH [this message]
2009-12-17  1:14 ` [33/90] x86: Fix iommu=nodac parameter handling Greg KH
2009-12-17  1:14 ` [34/90] x86: Fix typo in Intel CPU cache size descriptor Greg KH
2009-12-17  1:14 ` [35/90] x86: GART: pci-gart_64.c: Use correct length in strncmp Greg KH
2009-12-17  1:14 ` [36/90] drm/radeon/kms: Add quirk for HIS X1300 board Greg KH
2009-12-17  1:14 ` [37/90] drm/radeon/kms: fix legacy crtc2 dpms Greg KH
2009-12-17  1:14 ` [38/90] mac80211: Fix bug in computing crc over dynamic IEs in beacon Greg KH
2009-12-17  1:14 ` [39/90] mm: hugetlb: fix hugepage memory leak in mincore() Greg KH
2009-12-17  1:14 ` [40/90] mm: hugetlb: fix hugepage memory leak in walk_page_range() Greg KH
2009-12-17  1:14 ` [41/90] powerpc: Fix usage of 64-bit instruction in 32-bit altivec code Greg KH
2009-12-17  1:14 ` [42/90] Serial: Do not read IIR in serial8250_start_tx when UART_BUG_TXEN Greg KH
2009-12-17  1:14 ` [43/90] ide: Serialize CMD643 and CMD646 to fix a hardware bug with SSD Greg KH
2009-12-17  1:14 ` [44/90] ide: fix ioctl to pass requested transfer mode to ide_find_dma_mode instead of UDMA6 Greg KH
2009-12-17  1:14 ` [45/90] Revert "ide: try to use PIO Mode 0 during probe if possible" Greg KH
2009-12-17  1:14 ` [46/90] slc90e66: fix UDMA handling Greg KH
2009-12-17  1:14 ` [47/90] Au1x00: fix crash when trying register_netdev() Greg KH
2009-12-17  1:14 ` [48/90] b44 WOL setup: one-bit-off stack corruption kernel panic fix Greg KH
2009-12-17  1:15 ` [49/90] b44: Fix wedge when using netconsole Greg KH
2009-12-17  1:15 ` [50/90] e100: Use pci pool to work around GFP_ATOMIC order 5 memory allocation failure Greg KH
2009-12-17 15:03   ` Roger Oksanen
2009-12-17 15:09     ` Greg KH
2009-12-17 15:16       ` Roger Oksanen
2009-12-17  1:15 ` [51/90] gro: Fix illegal merging of trailer trash Greg KH
2009-12-17  1:15 ` [52/90] ip_fragment: also adjust skb->truesize for packets not owned by a socket Greg KH
2009-12-17  1:15 ` [53/90] Revert "isdn: isdn_ppp: Use SKB list facilities instead of home-grown implementation." Greg KH
2009-12-17  1:15 ` [54/90] net: Fix the rollback test in dev_change_name() Greg KH
2009-12-17  1:15 ` [55/90] NET: smc91x: Fix irq flags Greg KH
2009-12-17  1:15 ` [56/90] smsc9420: prevent BUG() if ethtool is called with interface down Greg KH
2009-12-17  1:15 ` [57/90] vlan: Fix register_vlan_dev() error path Greg KH
2009-12-17  1:15 ` [58/90] sparc64: Fix definition of VMEMMAP_SIZE Greg KH
2009-12-17  1:15 ` [59/90] sunsab: Do not set sunsab_reg.cons right before registering minors Greg KH
2009-12-17  1:15 ` [60/90] sunsu: Fix detection of SU ports which are RSC console or control Greg KH
2009-12-17  1:15 ` [61/90] serial: suncore: Add ignore_line argument to sunserial_console_match() Greg KH
2009-12-17  1:15 ` [62/90] serial: suncore: Fix RSC/LOM handling in sunserial_console_termios() Greg KH
2009-12-17  1:15 ` [63/90] sunsu: Pass true ignore_line to console match when RSC or LOM console Greg KH
2009-12-17  1:15 ` [64/90] sunsu: Use sunserial_console_termios() in sunsu_console_setup() Greg KH
2009-12-17  1:15 ` [65/90] sparc64: Dont specify IRQF_SHARED for LDC interrupts Greg KH
2009-12-17  1:15 ` [66/90] sparc64: Fix overly strict range type matching for PCI devices Greg KH
2009-12-17  1:15 ` [67/90] sparc64: Fix stack debugging IRQ stack regression Greg KH
2009-12-17  1:15 ` [68/90] sparc: Set UTS_MACHINE correctly Greg KH
2009-12-17  1:15 ` [69/90] x86/mce: Set up timer unconditionally Greg KH
2009-12-17  1:15 ` [70/90] b43legacy: avoid PPC fault during resume Greg KH
2009-12-17  1:15 ` [71/90] p54usb: Remove DMA buffer from stack Greg KH
2009-12-17  1:15 ` [72/90] [PATCH .31-stable] x86: Under BIOS control, restore APs APIC_LVTTHMR to the BSP value Greg KH
2009-12-17  1:15 ` [73/90] ACPI: Use the ARB_DISABLE for the CPU which model id is less than 0x0f Greg KH
2009-12-17  1:15 ` [74/90] asus-laptop: change light sens default values Greg KH
2009-12-17  1:15 ` [75/90] backlight: lcd - Fix wrong sizeof Greg KH
2009-12-17  1:15 ` [76/90] drm/i915: Avoid NULL dereference with component_only tv_modes Greg KH
2009-12-17  1:15 ` [77/90] drm/i915: Fix CRT hotplug detect by checking really no channels attached Greg KH
2009-12-17  1:15 ` [78/90] drm/i915: Fix LVDS stability issue on Ironlake Greg KH
2009-12-17  1:15 ` [79/90] drm/i915: save/restore BLC histogram control reg across suspend/resume Greg KH
2009-12-17  1:15 ` [80/90] drm/i915: PineView only has LVDS and CRT ports Greg KH
2009-12-17  1:15 ` [81/90] ext3: Fix data / filesystem corruption when write fails to copy data Greg KH
2009-12-17  1:15 ` [82/90] ipvs: zero usvc and udest Greg KH
2009-12-17  1:15 ` [83/90] ipw2100: fix rebooting hang with driver loaded Greg KH
2009-12-17  1:15 ` [84/90] jffs2: Fix long-standing bug with symlink garbage collection Greg KH
2009-12-17  1:15 ` [85/90] matroxfb: fix problems with display stability Greg KH
2009-12-17  1:15 ` [86/90] net: Fix userspace RTM_NEWLINK notifications Greg KH
2009-12-17  1:15 ` [87/90] sysctl_max_map_count should be non-negative Greg KH
2009-12-17  1:15 ` [88/90] thinkpad-acpi: fix default brightness_mode for R50e/R51 Greg KH
2009-12-17  1:15 ` [89/90] thinkpad-acpi: preserve rfkill state across suspend/resume Greg KH
2009-12-17  1:15 ` [90/90] V4L/DVB (13116): gspca - ov519: Webcam 041e:4067 added Greg KH

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=20091217011602.051155536@mini.kroah.org \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=coschult@us.ibm.com \
    --cc=djwong@us.ibm.com \
    --cc=fujita.tomonori@lab.ntt.co.jp \
    --cc=jdmason@kudzu.us \
    --cc=joerg.roedel@amd.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=muli@il.ibm.com \
    --cc=stable-review@kernel.org \
    --cc=stable@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=yhlu.kernel@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®