Yuji Shimada
2009-Apr-03  04:33 UTC
[Xen-devel] [PATCH] Don''t disable I/O decoding on reassigning resource
This patch does not disable I/O decoding on reassigning resource.
When I reserve UHCI for guest domain with "guestdev=" and
"reassign_resources" parameters, spurious interrupts occurred.
The reason is that UHCI is not reset by uhci_check_and_reset_hc
because I/O decoding is disabled. UHCI keeps asserting the interrupt
line. As a result spurious interrupts occur.
The patch does not disable I/O decoding. It disables only memory
decoding. So UHCI is reset and spurious interrupts do not occur.
Thanks,
--
Yuji Shimada
Signed-off-by: Yuji Shimada <shimada-yxb@necst.nec.co.jp>
diff -r 67a7ffcc5067 drivers/pci/quirks.c
--- a/drivers/pci/quirks.c	Wed Apr 01 11:43:01 2009 +0100
+++ b/drivers/pci/quirks.c	Fri Apr 03 13:10:53 2009 +0900
@@ -26,15 +26,16 @@
 
 #ifdef CONFIG_PCI_REASSIGN
 /*
- * This quirk function disables the device and releases resources
- * which is specified by kernel''s boot parameter
''reassigndev''.
+ * This quirk function disables memory decoding and releases memory 
+ * resources which is specified by kernel''s boot parameter
''reassigndev''.
  * Later on, kernel will assign page-aligned memory resource back
- * to that device.
+ * to the device.
  */
 static void __devinit quirk_release_resources(struct pci_dev *dev)
 {
 	int i;
 	struct resource *r;
+	u16 command;
 
 	if (pci_is_reassigndev(dev)) {
 		if (dev->hdr_type == PCI_HEADER_TYPE_NORMAL &&
@@ -43,9 +44,11 @@ static void __devinit quirk_release_reso
 			return;
 		}
 		printk(KERN_INFO 
-			"PCI: Disable device and release resources [%s].\n",
+			"PCI: Disable memory decoding and release memory resources
[%s].\n",
 			pci_name(dev));
-		pci_disable_device(dev);
+		pci_read_config_word(dev, PCI_COMMAND, &command);
+		command &= ~PCI_COMMAND_MEMORY;
+		pci_write_config_word(dev, PCI_COMMAND, command);
 
 		for (i=0; i < PCI_NUM_RESOURCES; i++) {
 			r = &dev->resource[i];
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel