public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
	Zwane Mwaikambo <zwane@arm.linux.org.uk>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Randy Dunlap <rdunlap@xenotime.net>,
	Dave Jones <davej@redhat.com>,
	Chuck Wolber <chuckw@quantumlinux.com>,
	Chris Wedgwood <reviews@ml.cw.f00f.org>,
	Michael Krufky <mkrufky@linuxtv.org>,
	Chuck Ebbert <cebbert@redhat.com>,
	Domenico Andreoli <cavokz@gmail.com>, Willy Tarreau <w@1wt.eu>,
	Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
	Jake Edge <jake@lwn.net>, Eugene Teo <eteo@redhat.com>,
	torvalds@linux-foundation.org, akpm@linux-foundation.org,
	alan@lxorguk.ukuu.org.uk, Yinghai Lu <yinghai@kernel.org>,
	Jesse Barnes <jbarnes@hobbes.lan>
Subject: [patch 069/114] PCI: dont enable too many HT MSI mappings
Date: Fri, 13 Mar 2009 18:10:46 -0700	[thread overview]
Message-ID: <20090314011041.598193480@mini.kroah.org> (raw)
In-Reply-To: <20090314011649.GA26170@kroah.com>

[-- Attachment #1: pci-don-t-enable-too-many-ht-msi-mappings.patch --]
[-- Type: text/plain, Size: 4359 bytes --]

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

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

From: Yinghai Lu <yinghai@kernel.org>

commit 1dec6b054dd1fc780e18b815068bf5677409eb2d upstream.

Prakash reported that his c51-mcp51 ondie sound card doesn't work with
MSI.  But if he hacks out the HT-MSI quirk, MSI works fine.

So this patch reworks the nv_msi_ht_cap_quirk().  It will now only
enable ht_msi on own its root device, avoiding enabling it on devices
following that root dev.

Reported-by: Prakash Punnoor <prakash@punnoor.de>
Tested-by: Prakash Punnoor <prakash@punnoor.de>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Jesse Barnes <jbarnes@hobbes.lan>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/pci/quirks.c |  115 ++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 100 insertions(+), 15 deletions(-)

--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -1847,10 +1847,100 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NV
 			PCI_DEVICE_ID_NVIDIA_NVENET_15,
 			nvenet_msi_disable);
 
-static void __devinit nv_msi_ht_cap_quirk(struct pci_dev *dev)
+static void __devinit nv_ht_enable_msi_mapping(struct pci_dev *dev)
 {
 	struct pci_dev *host_bridge;
+	int pos;
+	int i, dev_no;
+	int found = 0;
+
+	dev_no = dev->devfn >> 3;
+	for (i = dev_no; i >= 0; i--) {
+		host_bridge = pci_get_slot(dev->bus, PCI_DEVFN(i, 0));
+		if (!host_bridge)
+			continue;
+
+		pos = pci_find_ht_capability(host_bridge, HT_CAPTYPE_SLAVE);
+		if (pos != 0) {
+			found = 1;
+			break;
+		}
+		pci_dev_put(host_bridge);
+	}
+
+	if (!found)
+		return;
+
+	/* root did that ! */
+	if (msi_ht_cap_enabled(host_bridge))
+		goto out;
+
+	ht_enable_msi_mapping(dev);
+
+out:
+	pci_dev_put(host_bridge);
+}
+
+static void __devinit ht_disable_msi_mapping(struct pci_dev *dev)
+{
+	int pos, ttl = 48;
+
+	pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING);
+	while (pos && ttl--) {
+		u8 flags;
+
+		if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS,
+					 &flags) == 0) {
+			dev_info(&dev->dev, "Enabling HT MSI Mapping\n");
+
+			pci_write_config_byte(dev, pos + HT_MSI_FLAGS,
+					      flags & ~HT_MSI_FLAGS_ENABLE);
+		}
+		pos = pci_find_next_ht_capability(dev, pos,
+						  HT_CAPTYPE_MSI_MAPPING);
+	}
+}
+
+static int __devinit ht_check_msi_mapping(struct pci_dev *dev)
+{
 	int pos, ttl = 48;
+	int found = 0;
+
+	/* check if there is HT MSI cap or enabled on this device */
+	pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING);
+	while (pos && ttl--) {
+		u8 flags;
+
+		if (found < 1)
+			found = 1;
+		if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS,
+					 &flags) == 0) {
+			if (flags & HT_MSI_FLAGS_ENABLE) {
+				if (found < 2) {
+					found = 2;
+					break;
+				}
+			}
+		}
+		pos = pci_find_next_ht_capability(dev, pos,
+						  HT_CAPTYPE_MSI_MAPPING);
+	}
+
+	return found;
+}
+
+static void __devinit nv_msi_ht_cap_quirk(struct pci_dev *dev)
+{
+	struct pci_dev *host_bridge;
+	int pos;
+	int found;
+
+	/* check if there is HT MSI cap or enabled on this device */
+	found = ht_check_msi_mapping(dev);
+
+	/* no HT MSI CAP */
+	if (found == 0)
+		return;
 
 	/*
 	 * HT MSI mapping should be disabled on devices that are below
@@ -1866,24 +1956,19 @@ static void __devinit nv_msi_ht_cap_quir
 	pos = pci_find_ht_capability(host_bridge, HT_CAPTYPE_SLAVE);
 	if (pos != 0) {
 		/* Host bridge is to HT */
-		ht_enable_msi_mapping(dev);
+		if (found == 1) {
+			/* it is not enabled, try to enable it */
+			nv_ht_enable_msi_mapping(dev);
+		}
 		return;
 	}
 
-	/* Host bridge is not to HT, disable HT MSI mapping on this device */
-	pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING);
-	while (pos && ttl--) {
-		u8 flags;
+	/* HT MSI is not enabled */
+	if (found == 1)
+		return;
 
-		if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS,
-					 &flags) == 0) {
-			dev_info(&dev->dev, "Disabling HT MSI mapping");
-			pci_write_config_byte(dev, pos + HT_MSI_FLAGS,
-					      flags & ~HT_MSI_FLAGS_ENABLE);
-		}
-		pos = pci_find_next_ht_capability(dev, pos,
-						  HT_CAPTYPE_MSI_MAPPING);
-	}
+	/* Host bridge is not to HT, disable HT MSI mapping on this device */
+	ht_disable_msi_mapping(dev);
 }
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, nv_msi_ht_cap_quirk);
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, PCI_ANY_ID, nv_msi_ht_cap_quirk);



  parent reply	other threads:[~2009-03-14  1:45 UTC|newest]

Thread overview: 117+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20090314010937.416083662@mini.kroah.org>
2009-03-14  1:16 ` [patch 000/114] 2.6.28.8-stable review Greg KH
2009-03-14  1:09   ` [patch 001/114] net: amend the fix for SO_BSDCOMPAT gsopt infoleak Greg KH
2009-03-14  1:09   ` [patch 002/114] net: Kill skb_truesize_check(), it only catches false-positives Greg KH
2009-03-14  1:09   ` [patch 003/114] sparc64: Fix crashes in jbusmc_print_dimm() Greg KH
2009-03-14  1:09   ` [patch 004/114] sparc64: Fix DAX handling via userspace access from kernel Greg KH
2009-03-14  1:09   ` [patch 005/114] vfs: separate FMODE_PREAD/FMODE_PWRITE into separate flags Greg KH
2009-03-14  1:09   ` [patch 006/114] seq_file: properly cope with pread Greg KH
2009-03-14  1:09   ` [patch 007/114] vt: Declare PIO_CMAP/GIO_CMAP as compatbile ioctls Greg KH
2009-03-14  1:09   ` [patch 008/114] timerfd: add flags check Greg KH
2009-03-14  1:09   ` [patch 009/114] aoe: ignore vendor extension AoE responses Greg KH
2009-03-14  1:09   ` [patch 010/114] mm: clean up for early_pfn_to_nid() Greg KH
2009-03-14  1:09   ` [patch 011/114] mm: fix memmap init for handling memory hole Greg KH
2009-03-14  1:09   ` [patch 012/114] [CIFS] Fix oops in cifs_strfromUCS_le mounting to servers which do not specify their OS Greg KH
2009-03-14  1:09   ` [patch 013/114] mm: fix lazy vmap purging (use-after-free error) Greg KH
2009-03-14  1:09   ` [patch 014/114] mm: vmap fix overflow Greg KH
2009-03-14  1:09   ` [patch 015/114] PCI quirk: enable MSI on 8132 Greg KH
2009-03-14  1:09   ` [patch 016/114] SCSI: hptiop: Add new PCI device ID Greg KH
2009-03-14  1:09   ` [patch 017/114] JFFS2: fix mount crash caused by removed nodes Greg KH
2009-03-14  1:09   ` [patch 018/114] SCSI: sd: revive sd_index_lock Greg KH
2009-03-14  1:09   ` [patch 019/114] USB: usb_get_string should check the descriptor type Greg KH
2009-03-14  1:09   ` [patch 020/114] USB: usb-storage: add IGNORE_RESIDUE flag for Genesys Logic adapters Greg KH
2009-03-14  1:09   ` [patch 021/114] USB: cdc-acm: add usb id for motomagx phones Greg KH
2009-03-14  1:09   ` [patch 022/114] rtl8187: New USB IDs for RTL8187L Greg KH
2009-03-14  1:10   ` [patch 023/114] WATCHDOG: ks8695_wdt.c: CLOCK_TICK_RATE undeclared Greg KH
2009-03-14  1:10   ` [patch 024/114] WATCHDOG: rc32434_wdt: fix watchdog driver Greg KH
2009-03-14  1:10   ` [patch 025/114] WATCHDOG: rc32434_wdt: fix sections Greg KH
2009-03-14  1:10   ` [patch 026/114] RDMA/nes: Dont allow userspace QPs to use STag zero Greg KH
2009-03-14  1:10   ` [patch 027/114] USB: option: add BenQ 3g modem information Greg KH
2009-03-14  1:10   ` [patch 028/114] USB: EHCI: slow down ITD reuse Greg KH
2009-03-14  1:10   ` [patch 029/114] md: avoid races when stopping resync Greg KH
2009-03-14  1:10   ` [patch 030/114] md/raid10: Dont call bitmap_cond_end_sync when we are doing recovery Greg KH
2009-03-14  1:10   ` [patch 031/114] md/raid10: Dont skip more than 1 bitmap-chunk at a time during recovery Greg KH
2009-03-14  1:10   ` [patch 032/114] sound: virtuoso: revert "do not overwrite EEPROM on Xonar D2/D2X" Greg KH
2009-03-14  1:10   ` [patch 033/114] ALSA: usb-audio - Fix non-continuous rate detection Greg KH
2009-03-14  1:10   ` [patch 034/114] ALSA: usb-audio - Workaround for misdetected sample rate with CM6207 Greg KH
2009-03-14  1:10   ` [patch 035/114] sound: usb-audio: fix uninitialized variable with M-Audio MIDI interfaces Greg KH
2009-03-14  1:10   ` [patch 036/114] ALSA: fix excessive background noise introduced by OSS emulation rate shrink Greg KH
2009-03-14  1:10   ` [patch 037/114] ALSA: hda - Fix digital mic on dell-m4-1 and dell-m4-3 Greg KH
2009-03-14  1:10   ` [patch 038/114] ALSA: hda - add another MacBook Pro 3,1 SSID Greg KH
2009-03-14  1:10   ` [patch 039/114] ALSA: aw2: do not grab every saa7146 based device Greg KH
2009-03-14  1:10   ` [patch 040/114] acer-wmi: fix regression in backlight detection Greg KH
2009-03-14  1:10   ` [patch 041/114] vmalloc: call flush_cache_vunmap() from unmap_kernel_range() Greg KH
2009-03-14  1:10   ` [patch 042/114] Fix fixpoint divide exception in acct_update_integrals Greg KH
2009-03-14  1:10   ` [patch 043/114] 8250: fix boot hang with serial console when using with Serial Over Lan port Greg KH
2009-03-14  1:10   ` [patch 044/114] x86, vmi: TSC going backwards check in vmi clocksource Greg KH
2009-03-14  1:10   ` [patch 045/114] HID: fix bus endianity in file2alias Greg KH
2009-03-14  1:10   ` [patch 046/114] inotify: fix GFP_KERNEL related deadlock Greg KH
2009-03-14  1:10   ` [patch 047/114] sdhci: fix led naming Greg KH
2009-03-14  1:10   ` [patch 048/114] x86: oprofile: dont set counter width from cpuid on Core2 Greg KH
2009-03-14  1:10   ` [patch 049/114] x86: add Dell XPS710 reboot quirk Greg KH
2009-03-14  1:10   ` [patch 050/114] intel-agp: fix a panic with 1M of shared memory, no GTT entries Greg KH
2009-03-14  1:10   ` [patch 051/114] mtd_dataflash: fix probing of AT45DB321C chips Greg KH
2009-03-14  1:10   ` [patch 052/114] proc: fix kflags to uflags copying in /proc/kpageflags Greg KH
2009-03-14  1:10   ` [patch 053/114] fs: new inode i_state corruption fix Greg KH
2009-03-14  1:10   ` [patch 054/114] PCIe: portdrv: call pci_disable_device during remove Greg KH
2009-03-14  1:10   ` [patch 055/114] PCI: Enable PCIe AER only after checking firmware support Greg KH
2009-03-14  1:10   ` [patch 056/114] jsm: additional device support Greg KH
2009-03-14  1:10   ` [patch 057/114] libata: Dont trust current capacity values in identify words 57-58 Greg KH
2009-03-14  1:10   ` [patch 058/114] libata: make sure port is thawed when skipping resets Greg KH
2009-03-14  1:10   ` [patch 059/114] mmc: fix data timeout for SEND_EXT_CSD Greg KH
2009-03-14  1:10   ` [patch 060/114] s3cmci: Fix hangup in do_pio_write() Greg KH
2009-03-14  1:10   ` [patch 061/114] mmc: s3cmci: fix s3c2410_dma_config() arguments Greg KH
2009-03-14  1:10   ` [patch 062/114] MMC: fix bug - SDHC card capacity not correct Greg KH
2009-03-14  1:10   ` [patch 063/114] mmc_test: fix basic read test Greg KH
2009-03-14  1:10   ` [patch 064/114] x86: tone down mtrr_trim_uncached_memory() warning Greg KH
2009-03-14  1:10   ` [patch 065/114] x86-64: fix int $0x80 -ENOSYS return Greg KH
2009-03-14  1:10   ` [patch 066/114] selinux: Fix a panic in selinux_netlbl_inode_permission() Greg KH
2009-03-14  1:10   ` [patch 067/114] selinux: Fix the NetLabel glue code for setsockopt() Greg KH
2009-03-14  1:10   ` [patch 068/114] hpilo: new pci device Greg KH
2009-03-14  1:10   ` Greg KH [this message]
2009-03-14  7:53     ` [patch 069/114] PCI: dont enable too many HT MSI mappings Prakash Punnoor
2009-03-17  0:28       ` Greg KH
2009-03-14  1:10   ` [patch 070/114] x86-64: seccomp: fix 32/64 syscall hole Greg KH
2009-03-14  1:10   ` [patch 071/114] x86-64: syscall-audit: " Greg KH
2009-03-14  1:10   ` [patch 072/114] xen: disable interrupts early, as start_kernel expects Greg KH
2009-03-14  1:10   ` [patch 073/114] xen/blkfront: use blk_rq_map_sg to generate ring entries Greg KH
2009-03-14  1:10   ` [patch 074/114] asix: new device ids Greg KH
2009-03-14  1:10   ` [patch 075/114] cdc_ether: add usb id for Ericsson F3507g Greg KH
2009-03-14  1:10   ` [patch 076/114] zaurus: add usb id for motomagx phones Greg KH
2009-03-14  1:10   ` [patch 077/114] fore200: fix oops on failed firmware load Greg KH
2009-03-14  1:10   ` [patch 078/114] PCI: Add PCI quirk to disable L0s ASPM state for 82575 and 82598 Greg KH
2009-03-14  1:10   ` [patch 079/114] copy_process: fix CLONE_PARENT && parent_exec_id interaction Greg KH
2009-03-14  1:10   ` [patch 080/114] proc: fix PG_locked reporting in /proc/kpageflags Greg KH
2009-03-14  1:10   ` [patch 081/114] powerpc: Fix load/store float double alignment handler Greg KH
2009-03-14  1:10   ` [patch 082/114] sdhci: Add quirk for controllers with no end-of-busy IRQ Greg KH
2009-03-14  1:11   ` [patch 083/114] sdhci: Add NO_BUSY_IRQ quirk for Marvell CAFE host chip Greg KH
2009-03-14  1:11   ` [patch 084/114] pipe_rdwr_fasync: fix the error handling to prevent the leak/crash Greg KH
2009-03-14  1:11   ` [patch 085/114] DVB: s5h1409: Perform s5h1409 soft reset after tuning Greg KH
2009-03-14  1:11   ` [patch 086/114] V4L: tda8290: fix TDA8290 + TDA18271 initialization Greg KH
2009-03-14  1:11   ` [patch 087/114] V4L: saa7127: fix broken S-Video with saa7129 Greg KH
2009-03-14  1:11   ` [patch 088/114] V4L: ivtv: fix decoder crash regression Greg KH
2009-03-14  1:11   ` [patch 089/114] jbd2: Fix return value of jbd2_journal_start_commit() Greg KH
2009-03-14  1:11   ` [patch 090/114] Revert "ext4: wait on all pending commits in ext4_sync_fs()" Greg KH
2009-03-14  1:11   ` [patch 091/114] jbd2: Avoid possible NULL dereference in jbd2_journal_begin_ordered_truncate() Greg KH
2009-03-14  1:11   ` [patch 092/114] ext4: Fix to read empty directory blocks correctly in 64k Greg KH
2009-03-14  1:11   ` [patch 093/114] ext4: Fix lockdep warning Greg KH
2009-03-14  1:11   ` [patch 094/114] ext4: Initialize preallocation list_heads properly Greg KH
2009-03-14  1:11   ` [patch 095/114] ext4: Implement range_cyclic in ext4_da_writepages instead of write_cache_pages Greg KH
2009-03-14  1:11   ` [patch 096/114] ext4: Fix NULL dereference in ext4_ext_migrate()s error handling Greg KH
2009-03-14  1:11   ` [patch 097/114] ext4: Add fallback for find_group_flex Greg KH
2009-03-14  1:11   ` [patch 098/114] ext4: Fix deadlock in ext4_write_begin() and ext4_da_write_begin() Greg KH
2009-03-14  1:11   ` [patch 099/114] x86/paravirt: make arch_flush_lazy_mmu/cpu disable preemption Greg KH
2009-03-14  1:11   ` [patch 100/114] x86, hpet: fix for LS21 + HPET = boot hang Greg KH
2009-03-14  1:11   ` [patch 101/114] x86: math_emu info cleanup Greg KH
2009-03-14  1:11   ` [patch 102/114] x86: fix math_emu register frame access Greg KH
2009-03-14  1:11   ` [patch 103/114] ide-iops: fix odd-length ATAPI PIO transfers Greg KH
2009-03-14  1:11   ` [patch 104/114] HID: move tmff and zpff devices from ignore_list to blacklist Greg KH
2009-03-14  1:11   ` [patch 105/114] ARM: Add i2c_board_info for RiscPC PCF8583 Greg KH
2009-03-14  1:11   ` [patch 106/114] i2c: Timeouts reach -1 Greg KH
2009-03-14  1:11   ` [patch 107/114] i2c: Fix misplaced parentheses Greg KH
2009-03-14  1:11   ` [patch 108/114] ACPI: fix broken usage of name.ascii Greg KH
2009-03-14  1:11   ` [patch 109/114] ACPI: fix broken usage of acpi_ut_get_node_name() Greg KH
2009-03-14  1:11   ` [patch 110/114] crypto: api - Fix algorithm test race that broke aead initialisation Greg KH
2009-03-14  1:11   ` [patch 111/114] hwmon: (f71882fg) Hide misleading error message Greg KH
2009-03-14  1:11   ` [patch 112/114] drm/i915: Add missing userland definitions for gem init/execbuffer Greg KH
2009-03-14  1:11   ` [patch 113/114] MIPS: compat: Implement is_compat_task Greg KH
2009-03-14  1:11   ` [patch 114/114] hwmon: (it87) Properly decode -128 degrees C temperature 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=20090314011041.598193480@mini.kroah.org \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=cavokz@gmail.com \
    --cc=cebbert@redhat.com \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=eteo@redhat.com \
    --cc=jake@lwn.net \
    --cc=jbarnes@hobbes.lan \
    --cc=jmforbes@linuxtx.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mkrufky@linuxtv.org \
    --cc=rbranco@la.checkpoint.com \
    --cc=rdunlap@xenotime.net \
    --cc=reviews@ml.cw.f00f.org \
    --cc=stable@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=tytso@mit.edu \
    --cc=w@1wt.eu \
    --cc=yinghai@kernel.org \
    --cc=zwane@arm.linux.org.uk \
    /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