From: Greg Kroah-Hartman Date: Mon, 29 Jun 2009 21:43:26 +0000 (-0700) Subject: .27 patches X-Git-Tag: v2.6.27.26~28 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1a6e1ef347dc814c8a0ba6663b07f8cf9ddf110a;p=thirdparty%2Fkernel%2Fstable-queue.git .27 patches --- diff --git a/queue-2.6.27/isdn-fix-dma-alloc-for-hfcpci.patch b/queue-2.6.27/isdn-fix-dma-alloc-for-hfcpci.patch new file mode 100644 index 00000000000..280ab1121e0 --- /dev/null +++ b/queue-2.6.27/isdn-fix-dma-alloc-for-hfcpci.patch @@ -0,0 +1,103 @@ +From 8a745b9d91962991ce87a649a4dc3af3206c2c8b Mon Sep 17 00:00:00 2001 +From: Karsten Keil +Date: Tue, 2 Jun 2009 14:57:35 +0200 +Subject: ISDN: Fix DMA alloc for hfcpci + +From: Karsten Keil + +commit 8a745b9d91962991ce87a649a4dc3af3206c2c8b upstream. + +Replace wrong code with correct DMA API functions. + +Signed-off-by: Karsten Keil +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/isdn/hisax/hfc_pci.c | 41 ++++++++++++++++++++++++++++++----------- + drivers/isdn/hisax/hisax.h | 2 +- + 2 files changed, 31 insertions(+), 12 deletions(-) + +--- a/drivers/isdn/hisax/hfc_pci.c ++++ b/drivers/isdn/hisax/hfc_pci.c +@@ -82,8 +82,9 @@ release_io_hfcpci(struct IsdnCardState * + Write_hfc(cs, HFCPCI_INT_M2, cs->hw.hfcpci.int_m2); + pci_write_config_word(cs->hw.hfcpci.dev, PCI_COMMAND, 0); /* disable memory mapped ports + busmaster */ + del_timer(&cs->hw.hfcpci.timer); +- kfree(cs->hw.hfcpci.share_start); +- cs->hw.hfcpci.share_start = NULL; ++ pci_free_consistent(cs->hw.hfcpci.dev, 0x8000, ++ cs->hw.hfcpci.fifos, cs->hw.hfcpci.dma); ++ cs->hw.hfcpci.fifos = NULL; + iounmap((void *)cs->hw.hfcpci.pci_io); + } + +@@ -1663,8 +1664,19 @@ setup_hfcpci(struct IsdnCard *card) + dev_hfcpci); + i++; + if (tmp_hfcpci) { ++ dma_addr_t dma_mask = DMA_BIT_MASK(32) & ~0x7fffUL; + if (pci_enable_device(tmp_hfcpci)) + continue; ++ if (pci_set_dma_mask(tmp_hfcpci, dma_mask)) { ++ printk(KERN_WARNING ++ "HiSax hfc_pci: No suitable DMA available.\n"); ++ continue; ++ } ++ if (pci_set_consistent_dma_mask(tmp_hfcpci, dma_mask)) { ++ printk(KERN_WARNING ++ "HiSax hfc_pci: No suitable consistent DMA available.\n"); ++ continue; ++ } + pci_set_master(tmp_hfcpci); + if ((card->para[0]) && (card->para[0] != (tmp_hfcpci->resource[ 0].start & PCI_BASE_ADDRESS_IO_MASK))) + continue; +@@ -1693,22 +1705,29 @@ setup_hfcpci(struct IsdnCard *card) + printk(KERN_WARNING "HFC-PCI: No IO-Mem for PCI card found\n"); + return (0); + } ++ + /* Allocate memory for FIFOS */ +- /* Because the HFC-PCI needs a 32K physical alignment, we */ +- /* need to allocate the double mem and align the address */ +- if (!(cs->hw.hfcpci.share_start = kmalloc(65536, GFP_KERNEL))) { +- printk(KERN_WARNING "HFC-PCI: Error allocating memory for FIFO!\n"); ++ cs->hw.hfcpci.fifos = pci_alloc_consistent(cs->hw.hfcpci.dev, ++ 0x8000, &cs->hw.hfcpci.dma); ++ if (!cs->hw.hfcpci.fifos) { ++ printk(KERN_WARNING "HFC-PCI: Error allocating FIFO memory!\n"); ++ return 0; ++ } ++ if (cs->hw.hfcpci.dma & 0x7fff) { ++ printk(KERN_WARNING ++ "HFC-PCI: Error DMA memory not on 32K boundary (%lx)\n", ++ (u_long)cs->hw.hfcpci.dma); ++ pci_free_consistent(cs->hw.hfcpci.dev, 0x8000, ++ cs->hw.hfcpci.fifos, cs->hw.hfcpci.dma); + return 0; + } +- cs->hw.hfcpci.fifos = (void *) +- (((ulong) cs->hw.hfcpci.share_start) & ~0x7FFF) + 0x8000; +- pci_write_config_dword(cs->hw.hfcpci.dev, 0x80, (u_int) virt_to_bus(cs->hw.hfcpci.fifos)); ++ pci_write_config_dword(cs->hw.hfcpci.dev, 0x80, (u32)cs->hw.hfcpci.dma); + cs->hw.hfcpci.pci_io = ioremap((ulong) cs->hw.hfcpci.pci_io, 256); + printk(KERN_INFO +- "HFC-PCI: defined at mem %p fifo %p(%#x) IRQ %d HZ %d\n", ++ "HFC-PCI: defined at mem %p fifo %p(%lx) IRQ %d HZ %d\n", + cs->hw.hfcpci.pci_io, + cs->hw.hfcpci.fifos, +- (u_int) virt_to_bus(cs->hw.hfcpci.fifos), ++ (u_long)cs->hw.hfcpci.dma, + cs->irq, HZ); + + spin_lock_irqsave(&cs->lock, flags); +--- a/drivers/isdn/hisax/hisax.h ++++ b/drivers/isdn/hisax/hisax.h +@@ -694,7 +694,7 @@ struct hfcPCI_hw { + int nt_timer; + struct pci_dev *dev; + unsigned char *pci_io; /* start of PCI IO memory */ +- void *share_start; /* shared memory for Fifos start */ ++ dma_addr_t dma; /* dma handle for Fifos */ + void *fifos; /* FIFO memory */ + int last_bfifo_cnt[2]; /* marker saving last b-fifo frame count */ + struct timer_list timer; diff --git a/queue-2.6.27/series b/queue-2.6.27/series index 9a1b49db8e8..49524e7d899 100644 --- a/queue-2.6.27/series +++ b/queue-2.6.27/series @@ -7,3 +7,6 @@ firmware_map-fix-hang-with-x86-32bit.patch jbd-fix-race-in-buffer-processing-in-commit-code.patch pci-disable-aspm-on-via-root-port-under-bridge-configurations.patch r8169-fix-crash-when-large-packets-are-received.patch +isdn-fix-dma-alloc-for-hfcpci.patch +x86-add-quirk-for-reboot-stalls-on-a-dell-optiplex-360.patch +x86-quirk-for-reboot-stalls-on-a-dell-optiplex-330.patch diff --git a/queue-2.6.27/x86-add-quirk-for-reboot-stalls-on-a-dell-optiplex-360.patch b/queue-2.6.27/x86-add-quirk-for-reboot-stalls-on-a-dell-optiplex-360.patch new file mode 100644 index 00000000000..c4125e18d01 --- /dev/null +++ b/queue-2.6.27/x86-add-quirk-for-reboot-stalls-on-a-dell-optiplex-360.patch @@ -0,0 +1,41 @@ +From 4a4aca641bc4598e77b866804f47c651ec4a764d Mon Sep 17 00:00:00 2001 +From: Jean Delvare +Date: Fri, 5 Jun 2009 12:02:38 +0200 +Subject: x86: Add quirk for reboot stalls on a Dell Optiplex 360 + +From: Jean Delvare + +commit 4a4aca641bc4598e77b866804f47c651ec4a764d upstream. + +The Dell Optiplex 360 hangs on reboot, just like the Optiplex 330, so +the same quirk is needed. + +Signed-off-by: Jean Delvare +Cc: Steve Conklin +Cc: Leann Ogasawara +LKML-Reference: <200906051202.38311.jdelvare@suse.de> +Signed-off-by: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/reboot.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/arch/x86/kernel/reboot.c ++++ b/arch/x86/kernel/reboot.c +@@ -169,6 +169,15 @@ static struct dmi_system_id __initdata r + DMI_MATCH(DMI_BOARD_NAME, "0KW626"), + }, + }, ++ { /* Handle problems with rebooting on Dell Optiplex 360 with 0T656F */ ++ .callback = set_bios_reboot, ++ .ident = "Dell OptiPlex 360", ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 360"), ++ DMI_MATCH(DMI_BOARD_NAME, "0T656F"), ++ }, ++ }, + { /* Handle problems with rebooting on Dell 2400's */ + .callback = set_bios_reboot, + .ident = "Dell PowerEdge 2400", diff --git a/queue-2.6.27/x86-quirk-for-reboot-stalls-on-a-dell-optiplex-330.patch b/queue-2.6.27/x86-quirk-for-reboot-stalls-on-a-dell-optiplex-330.patch new file mode 100644 index 00000000000..65218fc17d1 --- /dev/null +++ b/queue-2.6.27/x86-quirk-for-reboot-stalls-on-a-dell-optiplex-330.patch @@ -0,0 +1,40 @@ +From 093bac154c142fa1fb31a3ac69ae1bc08930231b Mon Sep 17 00:00:00 2001 +From: Steve Conklin +Date: Fri, 14 Nov 2008 00:55:51 -0600 +Subject: x86: quirk for reboot stalls on a Dell Optiplex 330 + +From: Steve Conklin + +commit 093bac154c142fa1fb31a3ac69ae1bc08930231b upstream. + +Dell Optiplex 330 appears to hang on reboot. This is resolved by adding +a quirk to set bios reboot. + +Signed-off-by: Leann Ogasawara +Signed-off-by: Steve Conklin +Signed-off-by: Ingo Molnar +Cc: Jean Delvare +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/reboot.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/arch/x86/kernel/reboot.c ++++ b/arch/x86/kernel/reboot.c +@@ -178,6 +178,15 @@ static struct dmi_system_id __initdata r + DMI_MATCH(DMI_BOARD_NAME, "0T656F"), + }, + }, ++ { /* Handle problems with rebooting on Dell Optiplex 330 with 0KP561 */ ++ .callback = set_bios_reboot, ++ .ident = "Dell OptiPlex 330", ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 330"), ++ DMI_MATCH(DMI_BOARD_NAME, "0KP561"), ++ }, ++ }, + { /* Handle problems with rebooting on Dell 2400's */ + .callback = set_bios_reboot, + .ident = "Dell PowerEdge 2400",