diff -urN oldtree/Documentation/kernel-parameters.txt newtree/Documentation/kernel-parameters.txt --- oldtree/Documentation/kernel-parameters.txt 2006-09-17 05:38:20.000000000 -0400 +++ newtree/Documentation/kernel-parameters.txt 2006-09-17 05:43:49.000000000 -0400 @@ -1176,11 +1176,7 @@ nomsi [MSI] If the PCI_MSI kernel config parameter is enabled, this kernel boot option can be used to disable the use of MSI interrupts system-wide. - nosort Don't sort PCI devices into breadth-first order. - This sorting is done to get a device - order compatible with older (<= 2.4) kernels. - and - [IA-32] Don't sort PCI devices according to + nosort [IA-32] Don't sort PCI devices according to order given by the PCI BIOS. This sorting is done to get a device order compatible with older kernels. diff -urN oldtree/arch/i386/pci/common.c newtree/arch/i386/pci/common.c --- oldtree/arch/i386/pci/common.c 2006-09-17 05:38:20.000000000 -0400 +++ newtree/arch/i386/pci/common.c 2006-09-17 05:46:21.000000000 -0400 @@ -189,8 +189,6 @@ pcibios_resource_survey(); - if (!(pci_probe & PCI_NO_SORT)) - pci_sort_breadthfirst(); #ifdef CONFIG_PCI_BIOS if ((pci_probe & PCI_BIOS_SORT) && !(pci_probe & PCI_NO_SORT)) pcibios_sort(); @@ -205,9 +203,6 @@ if (!strcmp(str, "off")) { pci_probe = 0; return NULL; - } else if (!strcmp(str, "nosort")) { - pci_probe |= PCI_NO_SORT; - return NULL; } #ifdef CONFIG_PCI_BIOS else if (!strcmp(str, "bios")) { @@ -216,6 +211,9 @@ } else if (!strcmp(str, "nobios")) { pci_probe &= ~PCI_PROBE_BIOS; return NULL; + } else if (!strcmp(str, "nosort")) { + pci_probe |= PCI_NO_SORT; + return NULL; } else if (!strcmp(str, "biosirq")) { pci_probe |= PCI_BIOS_IRQ_SCAN; return NULL; diff -urN oldtree/arch/ppc/mm/init.c newtree/arch/ppc/mm/init.c --- oldtree/arch/ppc/mm/init.c 2006-09-17 05:38:20.000000000 -0400 +++ newtree/arch/ppc/mm/init.c 2006-09-17 05:55:59.000000000 -0400 @@ -359,7 +359,7 @@ void __init paging_init(void) { unsigned long start_pfn, end_pfn; - unsigned long max_zone_pfns; + unsigned long max_zone_pfns[MAX_NR_ZONES]; #ifdef CONFIG_HIGHMEM map_page(PKMAP_BASE, 0, 0); /* XXX gross */ pkmap_page_table = pte_offset_kernel(pmd_offset(pgd_offset_k diff -urN oldtree/drivers/pci/probe.c newtree/drivers/pci/probe.c --- oldtree/drivers/pci/probe.c 2006-09-17 05:38:20.000000000 -0400 +++ newtree/drivers/pci/probe.c 2006-09-17 05:50:10.000000000 -0400 @@ -1068,92 +1068,3 @@ EXPORT_SYMBOL_GPL(pci_scan_child_bus); #endif -static int __init pci_sort_bf_cmp(const struct pci_dev *a, const struct pci_dev *b) -{ - if (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1; - else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return 1; - - if (a->bus->number < b->bus->number) return -1; - else if (a->bus->number > b->bus->number) return 1; - - if (a->devfn < b->devfn) return -1; - else if (a->devfn > b->devfn) return 1; - - return 0; -} - -/* - * Yes, this forcably breaks the klist abstraction temporarily. It - * just wants to sort the klist, not change reference counts and - * take/drop locks rapidly in the process. It does all this while - * holding the lock for the list, so objects can't otherwise be - * added/removed while we're swizzling. - */ - -static void __init pci_insertion_sort_klist(struct pci_dev *a, struct list_head *list) -{ - struct list_head *pos; - struct klist_node *n; - struct device *dev; - struct pci_dev *b; - list_for_each(pos, list) { - n = container_of(pos, struct klist_node, n_node); - dev = container_of(n, struct device, knode_bus); - b = to_pci_dev(dev); - if (pci_sort_bf_cmp(a, b) <= 0) { - list_move_tail(&a->dev.knode_bus.n_node, &b->dev.knode_bus.n_node); - return; - } - } - list_move_tail(&a->dev.knode_bus.n_node, list); -} - -static void __init pci_sort_breadthfirst_klist(void) -{ - LIST_HEAD(sorted_devices); - struct list_head *pos, *tmp; - struct klist_node *n; - struct device *dev; - struct pci_dev *pdev; - spin_lock(&pci_bus_type.klist_devices.k_lock); - list_for_each_safe(pos, tmp, &pci_bus_type.klist_devices.k_list) { - n = container_of(pos, struct klist_node, n_node); - dev = container_of(n, struct device, knode_bus); - pdev = to_pci_dev(dev); - pci_insertion_sort_klist(pdev, &sorted_devices); - } - list_splice(&sorted_devices, &pci_bus_type.klist_devices.k_list); - spin_unlock(&pci_bus_type.klist_devices.k_lock); -} - -static void __init pci_insertion_sort_devices(struct pci_dev *a, struct list_head *list) -{ - struct pci_dev *b; - list_for_each_entry(b, list, global_list) { - if (pci_sort_bf_cmp(a, b) <= 0) { - list_move_tail(&a->global_list, &b->global_list); - return; - } - } - list_move_tail(&a->global_list, list); -} - -static void __init pci_sort_breadthfirst_devices(void) -{ - LIST_HEAD(sorted_devices); - struct pci_dev *dev, *tmp; - - down_write(&pci_bus_sem); - list_for_each_entry_safe(dev, tmp, &pci_devices, global_list) { - pci_insertion_sort_devices(dev, &sorted_devices); - } - list_splice(&sorted_devices, &pci_devices); - up_write(&pci_bus_sem); -} - -void __init pci_sort_breadthfirst(void) -{ - pci_sort_breadthfirst_devices(); - pci_sort_breadthfirst_klist(); -} - diff -urN oldtree/drivers/serial/8250.c newtree/drivers/serial/8250.c --- oldtree/drivers/serial/8250.c 2006-09-17 05:38:20.000000000 -0400 +++ newtree/drivers/serial/8250.c 2006-09-17 06:03:18.000000000 -0400 @@ -2263,8 +2263,6 @@ unsigned int ier; int locked = 1; - touch_nmi_watchdog(); - local_irq_save(flags); if (up->port.sysrq) { /* serial8250_handle_port() already took the lock */ diff -urN oldtree/drivers/usb/host/ohci-hcd.c newtree/drivers/usb/host/ohci-hcd.c --- oldtree/drivers/usb/host/ohci-hcd.c 2006-09-17 05:38:20.000000000 -0400 +++ newtree/drivers/usb/host/ohci-hcd.c 2006-09-17 05:42:01.000000000 -0400 @@ -795,7 +795,10 @@ ohci_usb_reset (ohci); ohci_writel (ohci, OHCI_INTR_MIE, &ohci->regs->intrdisable); - + + free_irq(hcd->irq,hcd); + hcd->irq = -1; + remove_debug_files (ohci); ohci_mem_cleanup (ohci); if (ohci->hcca) { diff -urN oldtree/include/linux/pci.h newtree/include/linux/pci.h --- oldtree/include/linux/pci.h 2006-09-17 05:38:20.000000000 -0400 +++ newtree/include/linux/pci.h 2006-09-17 05:50:21.000000000 -0400 @@ -436,7 +436,6 @@ extern void pci_remove_bus(struct pci_bus *b); extern void pci_remove_bus_device(struct pci_dev *dev); void pci_setup_cardbus(struct pci_bus *bus); -extern void pci_sort_breadthfirst(void); /* Generic PCI functions exported to card drivers */ diff -urN oldtree/net/sunrpc/svcsock.c newtree/net/sunrpc/svcsock.c --- oldtree/net/sunrpc/svcsock.c 2006-09-17 05:38:20.000000000 -0400 +++ newtree/net/sunrpc/svcsock.c 2006-09-17 06:06:45.000000000 -0400 @@ -1709,6 +1709,7 @@ rqstp->rq_prot = dr->prot; rqstp->rq_addr = dr->addr; rqstp->rq_daddr = dr->daddr; + rqstp->rq_respages = rqstp->rq_pages; return dr->argslen<<2; }