diff options
46 files changed, 189 insertions, 160 deletions
diff --git a/Documentation/acpi-hotkey.txt b/Documentation/acpi-hotkey.txt index 4c115a7bb826..0acdc80c30c2 100644 --- a/Documentation/acpi-hotkey.txt +++ b/Documentation/acpi-hotkey.txt | |||
| @@ -33,3 +33,6 @@ The result of the execution of this aml method is | |||
| 33 | attached to /proc/acpi/hotkey/poll_method, which is dnyamically | 33 | attached to /proc/acpi/hotkey/poll_method, which is dnyamically |
| 34 | created. Please use command "cat /proc/acpi/hotkey/polling_method" | 34 | created. Please use command "cat /proc/acpi/hotkey/polling_method" |
| 35 | to retrieve it. | 35 | to retrieve it. |
| 36 | |||
| 37 | Note: Use cmdline "acpi_generic_hotkey" to over-ride | ||
| 38 | loading any platform specific drivers. | ||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index a998a8c2f95b..3d5cd7a09b2f 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
| @@ -159,6 +159,11 @@ running once the system is up. | |||
| 159 | 159 | ||
| 160 | acpi_fake_ecdt [HW,ACPI] Workaround failure due to BIOS lacking ECDT | 160 | acpi_fake_ecdt [HW,ACPI] Workaround failure due to BIOS lacking ECDT |
| 161 | 161 | ||
| 162 | acpi_generic_hotkey [HW,ACPI] | ||
| 163 | Allow consolidated generic hotkey driver to | ||
| 164 | over-ride platform specific driver. | ||
| 165 | See also Documentation/acpi-hotkey.txt. | ||
| 166 | |||
| 162 | ad1816= [HW,OSS] | 167 | ad1816= [HW,OSS] |
| 163 | Format: <io>,<irq>,<dma>,<dma2> | 168 | Format: <io>,<irq>,<dma>,<dma2> |
| 164 | See also Documentation/sound/oss/AD1816. | 169 | See also Documentation/sound/oss/AD1816. |
diff --git a/Documentation/pci.txt b/Documentation/pci.txt index 62b1dc5d97e2..76d28d033657 100644 --- a/Documentation/pci.txt +++ b/Documentation/pci.txt | |||
| @@ -266,20 +266,6 @@ port an old driver to the new PCI interface. They are no longer present | |||
| 266 | in the kernel as they aren't compatible with hotplug or PCI domains or | 266 | in the kernel as they aren't compatible with hotplug or PCI domains or |
| 267 | having sane locking. | 267 | having sane locking. |
| 268 | 268 | ||
| 269 | pcibios_present() and Since ages, you don't need to test presence | ||
| 270 | pci_present() of PCI subsystem when trying to talk to it. | ||
| 271 | If it's not there, the list of PCI devices | ||
| 272 | is empty and all functions for searching for | ||
| 273 | devices just return NULL. | ||
| 274 | pcibios_(read|write)_* Superseded by their pci_(read|write)_* | ||
| 275 | counterparts. | ||
| 276 | pcibios_find_* Superseded by their pci_get_* counterparts. | ||
| 277 | pci_for_each_dev() Superseded by pci_get_device() | ||
| 278 | pci_for_each_dev_reverse() Superseded by pci_find_device_reverse() | ||
| 279 | pci_for_each_bus() Superseded by pci_find_next_bus() | ||
| 280 | pci_find_device() Superseded by pci_get_device() | 269 | pci_find_device() Superseded by pci_get_device() |
| 281 | pci_find_subsys() Superseded by pci_get_subsys() | 270 | pci_find_subsys() Superseded by pci_get_subsys() |
| 282 | pci_find_slot() Superseded by pci_get_slot() | 271 | pci_find_slot() Superseded by pci_get_slot() |
| 283 | pcibios_find_class() Superseded by pci_get_class() | ||
| 284 | pci_find_class() Superseded by pci_get_class() | ||
| 285 | pci_(read|write)_*_nodev() Superseded by pci_bus_(read|write)_*() | ||
diff --git a/MAINTAINERS b/MAINTAINERS index 3b38d6ab06cf..33122b1519ca 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -1825,6 +1825,12 @@ P: Greg Kroah-Hartman | |||
| 1825 | M: greg@kroah.com | 1825 | M: greg@kroah.com |
| 1826 | S: Maintained | 1826 | S: Maintained |
| 1827 | 1827 | ||
| 1828 | PCIE HOTPLUG DRIVER | ||
| 1829 | P: Kristen Carlson Accardi | ||
| 1830 | M: kristen.c.accardi@intel.com | ||
| 1831 | L: pcihpd-discuss@lists.sourceforge.net | ||
| 1832 | S: Maintained | ||
| 1833 | |||
| 1828 | PCMCIA SUBSYSTEM | 1834 | PCMCIA SUBSYSTEM |
| 1829 | P: Linux PCMCIA Team | 1835 | P: Linux PCMCIA Team |
| 1830 | L: http://lists.infradead.org/mailman/listinfo/linux-pcmcia | 1836 | L: http://lists.infradead.org/mailman/listinfo/linux-pcmcia |
| @@ -2201,6 +2207,12 @@ W: http://projects.buici.com/arm | |||
| 2201 | L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) | 2207 | L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) |
| 2202 | S: Maintained | 2208 | S: Maintained |
| 2203 | 2209 | ||
| 2210 | SHPC HOTPLUG DRIVER | ||
| 2211 | P: Kristen Carlson Accardi | ||
| 2212 | M: kristen.c.accardi@intel.com | ||
| 2213 | L: pcihpd-discuss@lists.sourceforge.net | ||
| 2214 | S: Maintained | ||
| 2215 | |||
| 2204 | SPARC (sparc32): | 2216 | SPARC (sparc32): |
| 2205 | P: William L. Irwin | 2217 | P: William L. Irwin |
| 2206 | M: wli@holomorphy.com | 2218 | M: wli@holomorphy.com |
diff --git a/arch/ppc64/kernel/LparData.c b/arch/ppc64/kernel/LparData.c index 76cfd1449d52..1c11031c838e 100644 --- a/arch/ppc64/kernel/LparData.c +++ b/arch/ppc64/kernel/LparData.c | |||
| @@ -32,32 +32,12 @@ | |||
| 32 | /* The HvReleaseData is the root of the information shared between | 32 | /* The HvReleaseData is the root of the information shared between |
| 33 | * the hypervisor and Linux. | 33 | * the hypervisor and Linux. |
| 34 | */ | 34 | */ |
| 35 | |||
| 36 | /* | ||
| 37 | * WARNING - magic here | ||
| 38 | * | ||
| 39 | * Ok, this is a horrid hack below, but marginally better than the | ||
| 40 | * alternatives. What we really want is just to initialize | ||
| 41 | * hvReleaseData in C as in the #if 0 section here. However, gcc | ||
| 42 | * refuses to believe that (u32)&x is a constant expression, so will | ||
| 43 | * not allow the xMsNucDataOffset field to be properly initialized. | ||
| 44 | * So, we declare hvReleaseData in inline asm instead. We use inline | ||
| 45 | * asm, rather than a .S file, because the assembler won't generate | ||
| 46 | * the necessary relocation for the LparMap either, unless that symbol | ||
| 47 | * is declared in the same source file. Finally, we put the asm in a | ||
| 48 | * dummy, attribute-used function, instead of at file scope, because | ||
| 49 | * file scope asms don't allow contraints. We want to use the "i" | ||
| 50 | * constraints to put sizeof() and offsetof() expressions in there, | ||
| 51 | * because including asm/offsets.h in C code then stringifying causes | ||
| 52 | * all manner of warnings. | ||
| 53 | */ | ||
| 54 | #if 0 | ||
| 55 | struct HvReleaseData hvReleaseData = { | 35 | struct HvReleaseData hvReleaseData = { |
| 56 | .xDesc = 0xc8a5d9c4, /* "HvRD" ebcdic */ | 36 | .xDesc = 0xc8a5d9c4, /* "HvRD" ebcdic */ |
| 57 | .xSize = sizeof(struct HvReleaseData), | 37 | .xSize = sizeof(struct HvReleaseData), |
| 58 | .xVpdAreasPtrOffset = offsetof(struct naca_struct, xItVpdAreas), | 38 | .xVpdAreasPtrOffset = offsetof(struct naca_struct, xItVpdAreas), |
| 59 | .xSlicNacaAddr = &naca, /* 64-bit Naca address */ | 39 | .xSlicNacaAddr = &naca, /* 64-bit Naca address */ |
| 60 | .xMsNucDataOffset = (u32)((unsigned long)&xLparMap - KERNELBASE), | 40 | .xMsNucDataOffset = LPARMAP_PHYS, |
| 61 | .xFlags = HVREL_TAGSINACTIVE /* tags inactive */ | 41 | .xFlags = HVREL_TAGSINACTIVE /* tags inactive */ |
| 62 | /* 64 bit */ | 42 | /* 64 bit */ |
| 63 | /* shared processors */ | 43 | /* shared processors */ |
| @@ -70,63 +50,6 @@ struct HvReleaseData hvReleaseData = { | |||
| 70 | 0xa7, 0x40, 0xf2, 0x4b, | 50 | 0xa7, 0x40, 0xf2, 0x4b, |
| 71 | 0xf4, 0x4b, 0xf6, 0xf4 }, | 51 | 0xf4, 0x4b, 0xf6, 0xf4 }, |
| 72 | }; | 52 | }; |
| 73 | #endif | ||
| 74 | |||
| 75 | |||
| 76 | extern struct HvReleaseData hvReleaseData; | ||
| 77 | |||
| 78 | static void __attribute_used__ hvReleaseData_wrapper(void) | ||
| 79 | { | ||
| 80 | /* This doesn't appear to need any alignment (even 4 byte) */ | ||
| 81 | asm volatile ( | ||
| 82 | " lparMapPhys = xLparMap - %3\n" | ||
| 83 | " .data\n" | ||
| 84 | " .globl hvReleaseData\n" | ||
| 85 | "hvReleaseData:\n" | ||
| 86 | " .long 0xc8a5d9c4\n" /* xDesc */ | ||
| 87 | /* "HvRD" in ebcdic */ | ||
| 88 | " .short %0\n" /* xSize */ | ||
| 89 | " .short %1\n" /* xVpdAreasPtrOffset */ | ||
| 90 | " .llong naca\n" /* xSlicNacaAddr */ | ||
| 91 | " .long lparMapPhys\n" /* xMsNucDataOffset */ | ||
| 92 | " .long 0\n" /* xRsvd1 */ | ||
| 93 | " .short %2\n" /* xFlags */ | ||
| 94 | " .short 4\n" /* xVrmIndex - v5r2m0 */ | ||
| 95 | " .short 3\n" /* xMinSupportedPlicVrmIndex - v5r1m0 */ | ||
| 96 | " .short 3\n" /* xMinCompatablePlicVrmIndex - v5r1m0 */ | ||
| 97 | " .long 0xd38995a4\n" /* xVrmName */ | ||
| 98 | " .long 0xa740f24b\n" /* "Linux 2.4.64" ebcdic */ | ||
| 99 | " .long 0xf44bf6f4\n" | ||
| 100 | " . = hvReleaseData + %0\n" | ||
| 101 | " .previous\n" | ||
| 102 | : : "i"(sizeof(hvReleaseData)), | ||
| 103 | "i"(offsetof(struct naca_struct, xItVpdAreas)), | ||
| 104 | "i"(HVREL_TAGSINACTIVE /* tags inactive, 64 bit, */ | ||
| 105 | /* shared processors, HMT allowed */ | ||
| 106 | | 6), /* TEMP: This allows non-GA drivers */ | ||
| 107 | "i"(KERNELBASE) | ||
| 108 | ); | ||
| 109 | } | ||
| 110 | |||
| 111 | struct LparMap __attribute__((aligned (16))) xLparMap = { | ||
| 112 | .xNumberEsids = HvEsidsToMap, | ||
| 113 | .xNumberRanges = HvRangesToMap, | ||
| 114 | .xSegmentTableOffs = STAB0_PAGE, | ||
| 115 | |||
| 116 | .xEsids = { | ||
| 117 | { .xKernelEsid = GET_ESID(KERNELBASE), | ||
| 118 | .xKernelVsid = KERNEL_VSID(KERNELBASE), }, | ||
| 119 | { .xKernelEsid = GET_ESID(VMALLOCBASE), | ||
| 120 | .xKernelVsid = KERNEL_VSID(VMALLOCBASE), }, | ||
| 121 | }, | ||
| 122 | |||
| 123 | .xRanges = { | ||
| 124 | { .xPages = HvPagesToMap, | ||
| 125 | .xOffset = 0, | ||
| 126 | .xVPN = KERNEL_VSID(KERNELBASE) << (SID_SHIFT - PAGE_SHIFT), | ||
| 127 | }, | ||
| 128 | }, | ||
| 129 | }; | ||
| 130 | 53 | ||
| 131 | extern void system_reset_iSeries(void); | 54 | extern void system_reset_iSeries(void); |
| 132 | extern void machine_check_iSeries(void); | 55 | extern void machine_check_iSeries(void); |
diff --git a/arch/ppc64/kernel/Makefile b/arch/ppc64/kernel/Makefile index d9b2660ef221..2ecccb6b4f8c 100644 --- a/arch/ppc64/kernel/Makefile +++ b/arch/ppc64/kernel/Makefile | |||
| @@ -73,3 +73,8 @@ obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o | |||
| 73 | obj-$(CONFIG_KPROBES) += kprobes.o | 73 | obj-$(CONFIG_KPROBES) += kprobes.o |
| 74 | 74 | ||
| 75 | CFLAGS_ioctl32.o += -Ifs/ | 75 | CFLAGS_ioctl32.o += -Ifs/ |
| 76 | |||
| 77 | ifeq ($(CONFIG_PPC_ISERIES),y) | ||
| 78 | arch/ppc64/kernel/head.o: arch/ppc64/kernel/lparmap.s | ||
| 79 | AFLAGS_head.o += -Iarch/ppc64/kernel | ||
| 80 | endif | ||
diff --git a/arch/ppc64/kernel/head.S b/arch/ppc64/kernel/head.S index 784f56d4684c..accaa052d31f 100644 --- a/arch/ppc64/kernel/head.S +++ b/arch/ppc64/kernel/head.S | |||
| @@ -38,6 +38,7 @@ | |||
| 38 | #include <asm/cputable.h> | 38 | #include <asm/cputable.h> |
| 39 | #include <asm/setup.h> | 39 | #include <asm/setup.h> |
| 40 | #include <asm/hvcall.h> | 40 | #include <asm/hvcall.h> |
| 41 | #include <asm/iSeries/LparMap.h> | ||
| 41 | 42 | ||
| 42 | #ifdef CONFIG_PPC_ISERIES | 43 | #ifdef CONFIG_PPC_ISERIES |
| 43 | #define DO_SOFT_DISABLE | 44 | #define DO_SOFT_DISABLE |
| @@ -679,6 +680,11 @@ hardware_interrupt_iSeries_masked: | |||
| 679 | .globl fwnmi_data_area | 680 | .globl fwnmi_data_area |
| 680 | fwnmi_data_area: | 681 | fwnmi_data_area: |
| 681 | 682 | ||
| 683 | #ifdef CONFIG_PPC_ISERIES | ||
| 684 | . = LPARMAP_PHYS | ||
| 685 | #include "lparmap.s" | ||
| 686 | #endif /* CONFIG_PPC_ISERIES */ | ||
| 687 | |||
| 682 | /* | 688 | /* |
| 683 | * Vectors for the FWNMI option. Share common code. | 689 | * Vectors for the FWNMI option. Share common code. |
| 684 | */ | 690 | */ |
diff --git a/arch/ppc64/kernel/lparmap.c b/arch/ppc64/kernel/lparmap.c new file mode 100644 index 000000000000..b81de286df5e --- /dev/null +++ b/arch/ppc64/kernel/lparmap.c | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2005 Stephen Rothwell IBM Corp. | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or | ||
| 5 | * modify it under the terms of the GNU General Public License | ||
| 6 | * as published by the Free Software Foundation; either version | ||
| 7 | * 2 of the License, or (at your option) any later version. | ||
| 8 | */ | ||
| 9 | #include <asm/mmu.h> | ||
| 10 | #include <asm/page.h> | ||
| 11 | #include <asm/iSeries/LparMap.h> | ||
| 12 | |||
| 13 | const struct LparMap __attribute__((__section__(".text"))) xLparMap = { | ||
| 14 | .xNumberEsids = HvEsidsToMap, | ||
| 15 | .xNumberRanges = HvRangesToMap, | ||
| 16 | .xSegmentTableOffs = STAB0_PAGE, | ||
| 17 | |||
| 18 | .xEsids = { | ||
| 19 | { .xKernelEsid = GET_ESID(KERNELBASE), | ||
| 20 | .xKernelVsid = KERNEL_VSID(KERNELBASE), }, | ||
| 21 | { .xKernelEsid = GET_ESID(VMALLOCBASE), | ||
| 22 | .xKernelVsid = KERNEL_VSID(VMALLOCBASE), }, | ||
| 23 | }, | ||
| 24 | |||
| 25 | .xRanges = { | ||
| 26 | { .xPages = HvPagesToMap, | ||
| 27 | .xOffset = 0, | ||
| 28 | .xVPN = KERNEL_VSID(KERNELBASE) << (SID_SHIFT - PAGE_SHIFT), | ||
| 29 | }, | ||
| 30 | }, | ||
| 31 | }; | ||
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 7289da3c4db6..0d11d6e6abd6 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
| @@ -71,7 +71,7 @@ EXPORT_SYMBOL(acpi_in_debugger); | |||
| 71 | extern char line_buf[80]; | 71 | extern char line_buf[80]; |
| 72 | #endif /*ENABLE_DEBUGGER*/ | 72 | #endif /*ENABLE_DEBUGGER*/ |
| 73 | 73 | ||
| 74 | int acpi_specific_hotkey_enabled; | 74 | int acpi_specific_hotkey_enabled = TRUE; |
| 75 | EXPORT_SYMBOL(acpi_specific_hotkey_enabled); | 75 | EXPORT_SYMBOL(acpi_specific_hotkey_enabled); |
| 76 | 76 | ||
| 77 | static unsigned int acpi_irq_irq; | 77 | static unsigned int acpi_irq_irq; |
| @@ -1162,11 +1162,11 @@ __setup("acpi_wake_gpes_always_on", acpi_wake_gpes_always_on_setup); | |||
| 1162 | int __init | 1162 | int __init |
| 1163 | acpi_hotkey_setup(char *str) | 1163 | acpi_hotkey_setup(char *str) |
| 1164 | { | 1164 | { |
| 1165 | acpi_specific_hotkey_enabled = TRUE; | 1165 | acpi_specific_hotkey_enabled = FALSE; |
| 1166 | return 1; | 1166 | return 1; |
| 1167 | } | 1167 | } |
| 1168 | 1168 | ||
| 1169 | __setup("acpi_specific_hotkey", acpi_hotkey_setup); | 1169 | __setup("acpi_generic_hotkey", acpi_hotkey_setup); |
| 1170 | 1170 | ||
| 1171 | /* | 1171 | /* |
| 1172 | * max_cstate is defined in the base kernel so modules can | 1172 | * max_cstate is defined in the base kernel so modules can |
diff --git a/drivers/base/class.c b/drivers/base/class.c index 479c12570881..0154a1623b21 100644 --- a/drivers/base/class.c +++ b/drivers/base/class.c | |||
| @@ -299,6 +299,11 @@ static void class_dev_release(struct kobject * kobj) | |||
| 299 | 299 | ||
| 300 | pr_debug("device class '%s': release.\n", cd->class_id); | 300 | pr_debug("device class '%s': release.\n", cd->class_id); |
| 301 | 301 | ||
| 302 | if (cd->devt_attr) { | ||
| 303 | kfree(cd->devt_attr); | ||
| 304 | cd->devt_attr = NULL; | ||
| 305 | } | ||
| 306 | |||
| 302 | if (cls->release) | 307 | if (cls->release) |
| 303 | cls->release(cd); | 308 | cls->release(cd); |
| 304 | else { | 309 | else { |
| @@ -591,11 +596,8 @@ void class_device_del(struct class_device *class_dev) | |||
| 591 | 596 | ||
| 592 | if (class_dev->dev) | 597 | if (class_dev->dev) |
| 593 | sysfs_remove_link(&class_dev->kobj, "device"); | 598 | sysfs_remove_link(&class_dev->kobj, "device"); |
| 594 | if (class_dev->devt_attr) { | 599 | if (class_dev->devt_attr) |
| 595 | class_device_remove_file(class_dev, class_dev->devt_attr); | 600 | class_device_remove_file(class_dev, class_dev->devt_attr); |
| 596 | kfree(class_dev->devt_attr); | ||
| 597 | class_dev->devt_attr = NULL; | ||
| 598 | } | ||
| 599 | class_device_remove_attrs(class_dev); | 601 | class_device_remove_attrs(class_dev); |
| 600 | 602 | ||
| 601 | kobject_hotplug(&class_dev->kobj, KOBJ_REMOVE); | 603 | kobject_hotplug(&class_dev->kobj, KOBJ_REMOVE); |
diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h index 46b294a12418..2b92b9e8c910 100644 --- a/drivers/pci/hotplug/pciehp.h +++ b/drivers/pci/hotplug/pciehp.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | #ifndef _PCIEHP_H | 29 | #ifndef _PCIEHP_H |
diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c index df4915dbc321..cafc7eadcf80 100644 --- a/drivers/pci/hotplug/pciehp_core.c +++ b/drivers/pci/hotplug/pciehp_core.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/pciehp_ctrl.c b/drivers/pci/hotplug/pciehp_ctrl.c index 0dbcf04aa35e..0e0947601526 100644 --- a/drivers/pci/hotplug/pciehp_ctrl.c +++ b/drivers/pci/hotplug/pciehp_ctrl.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index 1cda30bd6e47..7a0e27f0e063 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>,<dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/pciehp_pci.c b/drivers/pci/hotplug/pciehp_pci.c index 723b12c0bb7c..33b539b34f7e 100644 --- a/drivers/pci/hotplug/pciehp_pci.c +++ b/drivers/pci/hotplug/pciehp_pci.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/pciehprm.h b/drivers/pci/hotplug/pciehprm.h index 966775ffb0ff..05f20fbc5f50 100644 --- a/drivers/pci/hotplug/pciehprm.h +++ b/drivers/pci/hotplug/pciehprm.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/pciehprm_acpi.c b/drivers/pci/hotplug/pciehprm_acpi.c index 57f4e6d1b27c..305b47ec2f2c 100644 --- a/drivers/pci/hotplug/pciehprm_acpi.c +++ b/drivers/pci/hotplug/pciehprm_acpi.c | |||
| @@ -20,7 +20,7 @@ | |||
| 20 | * along with this program; if not, write to the Free Software | 20 | * along with this program; if not, write to the Free Software |
| 21 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 21 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 22 | * | 22 | * |
| 23 | * Send feedback to <dely.l.sy@intel.com> | 23 | * Send feedback to <kristen.c.accardi@intel.com> |
| 24 | * | 24 | * |
| 25 | */ | 25 | */ |
| 26 | 26 | ||
diff --git a/drivers/pci/hotplug/pciehprm_nonacpi.c b/drivers/pci/hotplug/pciehprm_nonacpi.c index 79a0aa6238ef..3622965f8961 100644 --- a/drivers/pci/hotplug/pciehprm_nonacpi.c +++ b/drivers/pci/hotplug/pciehprm_nonacpi.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/pciehprm_nonacpi.h b/drivers/pci/hotplug/pciehprm_nonacpi.h index 87c90e85ede9..b10603b0e958 100644 --- a/drivers/pci/hotplug/pciehprm_nonacpi.h +++ b/drivers/pci/hotplug/pciehprm_nonacpi.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/shpchp.h b/drivers/pci/hotplug/shpchp.h index 67b6a3370ceb..fe4d653da188 100644 --- a/drivers/pci/hotplug/shpchp.h +++ b/drivers/pci/hotplug/shpchp.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>,<dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | #ifndef _SHPCHP_H | 29 | #ifndef _SHPCHP_H |
diff --git a/drivers/pci/hotplug/shpchp_core.c b/drivers/pci/hotplug/shpchp_core.c index a70a5c5705f2..6f7d8a29957a 100644 --- a/drivers/pci/hotplug/shpchp_core.c +++ b/drivers/pci/hotplug/shpchp_core.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/shpchp_ctrl.c b/drivers/pci/hotplug/shpchp_ctrl.c index 490a9553a062..783b5abb0717 100644 --- a/drivers/pci/hotplug/shpchp_ctrl.c +++ b/drivers/pci/hotplug/shpchp_ctrl.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/shpchp_hpc.c b/drivers/pci/hotplug/shpchp_hpc.c index 38c5d9066697..8d98410bf1c0 100644 --- a/drivers/pci/hotplug/shpchp_hpc.c +++ b/drivers/pci/hotplug/shpchp_hpc.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>,<dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/shpchp_pci.c b/drivers/pci/hotplug/shpchp_pci.c index 90113e9cd69b..d867099114ec 100644 --- a/drivers/pci/hotplug/shpchp_pci.c +++ b/drivers/pci/hotplug/shpchp_pci.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/shpchprm.h b/drivers/pci/hotplug/shpchprm.h index 88aeb978c911..057b192ce589 100644 --- a/drivers/pci/hotplug/shpchprm.h +++ b/drivers/pci/hotplug/shpchprm.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/shpchprm_acpi.c b/drivers/pci/hotplug/shpchprm_acpi.c index 7957cdc72cd0..d37b31658edf 100644 --- a/drivers/pci/hotplug/shpchprm_acpi.c +++ b/drivers/pci/hotplug/shpchprm_acpi.c | |||
| @@ -20,7 +20,7 @@ | |||
| 20 | * along with this program; if not, write to the Free Software | 20 | * along with this program; if not, write to the Free Software |
| 21 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 21 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 22 | * | 22 | * |
| 23 | * Send feedback to <dely.l.sy@intel.com> | 23 | * Send feedback to <kristen.c.accardi@intel.com> |
| 24 | * | 24 | * |
| 25 | */ | 25 | */ |
| 26 | 26 | ||
diff --git a/drivers/pci/hotplug/shpchprm_legacy.c b/drivers/pci/hotplug/shpchprm_legacy.c index 37fa77a98289..ba6c549c9b9d 100644 --- a/drivers/pci/hotplug/shpchprm_legacy.c +++ b/drivers/pci/hotplug/shpchprm_legacy.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>,<dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/shpchprm_legacy.h b/drivers/pci/hotplug/shpchprm_legacy.h index 29ccea5e57e5..21bda74ddfa5 100644 --- a/drivers/pci/hotplug/shpchprm_legacy.h +++ b/drivers/pci/hotplug/shpchprm_legacy.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/shpchprm_nonacpi.c b/drivers/pci/hotplug/shpchprm_nonacpi.c index 88f4d9f41886..5f75ef7f3df2 100644 --- a/drivers/pci/hotplug/shpchprm_nonacpi.c +++ b/drivers/pci/hotplug/shpchprm_nonacpi.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/hotplug/shpchprm_nonacpi.h b/drivers/pci/hotplug/shpchprm_nonacpi.h index 6bc8668023c3..cddaaa5ee1b3 100644 --- a/drivers/pci/hotplug/shpchprm_nonacpi.h +++ b/drivers/pci/hotplug/shpchprm_nonacpi.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
| 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | * | 25 | * |
| 26 | * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> | 26 | * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> |
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index b5ab9aa6ff7c..2b85aa39f954 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c | |||
| @@ -453,7 +453,7 @@ static void enable_msi_mode(struct pci_dev *dev, int pos, int type) | |||
| 453 | } | 453 | } |
| 454 | } | 454 | } |
| 455 | 455 | ||
| 456 | static void disable_msi_mode(struct pci_dev *dev, int pos, int type) | 456 | void disable_msi_mode(struct pci_dev *dev, int pos, int type) |
| 457 | { | 457 | { |
| 458 | u16 control; | 458 | u16 control; |
| 459 | 459 | ||
| @@ -699,6 +699,9 @@ int pci_enable_msi(struct pci_dev* dev) | |||
| 699 | if (!pci_msi_enable || !dev) | 699 | if (!pci_msi_enable || !dev) |
| 700 | return status; | 700 | return status; |
| 701 | 701 | ||
| 702 | if (dev->no_msi) | ||
| 703 | return status; | ||
| 704 | |||
| 702 | temp = dev->irq; | 705 | temp = dev->irq; |
| 703 | 706 | ||
| 704 | if ((status = msi_init()) < 0) | 707 | if ((status = msi_init()) < 0) |
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index d94d7af4f7a0..d00168b1f662 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h | |||
| @@ -47,6 +47,12 @@ extern int pci_msi_quirk; | |||
| 47 | #define pci_msi_quirk 0 | 47 | #define pci_msi_quirk 0 |
| 48 | #endif | 48 | #endif |
| 49 | 49 | ||
| 50 | #ifdef CONFIG_PCI_MSI | ||
| 51 | void disable_msi_mode(struct pci_dev *dev, int pos, int type); | ||
| 52 | #else | ||
| 53 | static inline void disable_msi_mode(struct pci_dev *dev, int pos, int type) { } | ||
| 54 | #endif | ||
| 55 | |||
| 50 | extern int pcie_mch_quirk; | 56 | extern int pcie_mch_quirk; |
| 51 | extern struct device_attribute pci_dev_attrs[]; | 57 | extern struct device_attribute pci_dev_attrs[]; |
| 52 | extern struct class_device_attribute class_device_attr_cpuaffinity; | 58 | extern struct class_device_attribute class_device_attr_cpuaffinity; |
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index a9160ad16581..bb36bb69803f 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
| @@ -1291,6 +1291,27 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7520_MCH, quir | |||
| 1291 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7320_MCH, quirk_pcie_mch ); | 1291 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7320_MCH, quirk_pcie_mch ); |
| 1292 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, quirk_pcie_mch ); | 1292 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, quirk_pcie_mch ); |
| 1293 | 1293 | ||
| 1294 | |||
| 1295 | /* | ||
| 1296 | * It's possible for the MSI to get corrupted if shpc and acpi | ||
| 1297 | * are used together on certain PXH-based systems. | ||
| 1298 | */ | ||
| 1299 | static void __devinit quirk_pcie_pxh(struct pci_dev *dev) | ||
| 1300 | { | ||
| 1301 | disable_msi_mode(dev, pci_find_capability(dev, PCI_CAP_ID_MSI), | ||
| 1302 | PCI_CAP_ID_MSI); | ||
| 1303 | dev->no_msi = 1; | ||
| 1304 | |||
| 1305 | printk(KERN_WARNING "PCI: PXH quirk detected, " | ||
| 1306 | "disabling MSI for SHPC device\n"); | ||
| 1307 | } | ||
| 1308 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHD_0, quirk_pcie_pxh); | ||
| 1309 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHD_1, quirk_pcie_pxh); | ||
| 1310 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0, quirk_pcie_pxh); | ||
| 1311 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1, quirk_pcie_pxh); | ||
| 1312 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_pcie_pxh); | ||
| 1313 | |||
| 1314 | |||
| 1294 | static void __devinit quirk_netmos(struct pci_dev *dev) | 1315 | static void __devinit quirk_netmos(struct pci_dev *dev) |
| 1295 | { | 1316 | { |
| 1296 | unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4; | 1317 | unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4; |
diff --git a/drivers/usb/input/wacom.c b/drivers/usb/input/wacom.c index 02412e31a46b..3b266af3048a 100644 --- a/drivers/usb/input/wacom.c +++ b/drivers/usb/input/wacom.c | |||
| @@ -342,9 +342,6 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs) | |||
| 342 | goto exit; | 342 | goto exit; |
| 343 | } | 343 | } |
| 344 | 344 | ||
| 345 | x = le16_to_cpu(*(__le16 *) &data[2]); | ||
| 346 | y = le16_to_cpu(*(__le16 *) &data[4]); | ||
| 347 | |||
| 348 | input_regs(dev, regs); | 345 | input_regs(dev, regs); |
| 349 | 346 | ||
| 350 | if (data[1] & 0x10) { /* in prox */ | 347 | if (data[1] & 0x10) { /* in prox */ |
| @@ -373,15 +370,17 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs) | |||
| 373 | } | 370 | } |
| 374 | } | 371 | } |
| 375 | 372 | ||
| 376 | if (data[1] & 0x80) { | 373 | if (data[1] & 0x90) { |
| 374 | x = le16_to_cpu(*(__le16 *) &data[2]); | ||
| 375 | y = le16_to_cpu(*(__le16 *) &data[4]); | ||
| 377 | input_report_abs(dev, ABS_X, x); | 376 | input_report_abs(dev, ABS_X, x); |
| 378 | input_report_abs(dev, ABS_Y, y); | 377 | input_report_abs(dev, ABS_Y, y); |
| 379 | } | 378 | if (wacom->tool[0] != BTN_TOOL_MOUSE) { |
| 380 | if (wacom->tool[0] != BTN_TOOL_MOUSE) { | 379 | input_report_abs(dev, ABS_PRESSURE, le16_to_cpu(*(__le16 *) &data[6])); |
| 381 | input_report_abs(dev, ABS_PRESSURE, le16_to_cpu(*(__le16 *) &data[6])); | 380 | input_report_key(dev, BTN_TOUCH, data[1] & 0x01); |
| 382 | input_report_key(dev, BTN_TOUCH, data[1] & 0x01); | 381 | input_report_key(dev, BTN_STYLUS, data[1] & 0x02); |
| 383 | input_report_key(dev, BTN_STYLUS, data[1] & 0x02); | 382 | input_report_key(dev, BTN_STYLUS2, data[1] & 0x04); |
| 384 | input_report_key(dev, BTN_STYLUS2, data[1] & 0x04); | 383 | } |
| 385 | } | 384 | } |
| 386 | 385 | ||
| 387 | input_report_key(dev, wacom->tool[0], data[1] & 0x10); | 386 | input_report_key(dev, wacom->tool[0], data[1] & 0x10); |
| @@ -568,7 +567,7 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs) | |||
| 568 | 567 | ||
| 569 | /* Cintiq doesn't send data when RDY bit isn't set */ | 568 | /* Cintiq doesn't send data when RDY bit isn't set */ |
| 570 | if ((wacom->features->type == CINTIQ) && !(data[1] & 0x40)) | 569 | if ((wacom->features->type == CINTIQ) && !(data[1] & 0x40)) |
| 571 | return; | 570 | goto exit; |
| 572 | 571 | ||
| 573 | if (wacom->features->type >= INTUOS3) { | 572 | if (wacom->features->type >= INTUOS3) { |
| 574 | input_report_abs(dev, ABS_X, (data[2] << 9) | (data[3] << 1) | ((data[9] >> 1) & 1)); | 573 | input_report_abs(dev, ABS_X, (data[2] << 9) | (data[3] << 1) | ((data[9] >> 1) & 1)); |
diff --git a/drivers/usb/mon/mon_main.c b/drivers/usb/mon/mon_main.c index aa9d00808e4e..508a21028db4 100644 --- a/drivers/usb/mon/mon_main.c +++ b/drivers/usb/mon/mon_main.c | |||
| @@ -2,6 +2,8 @@ | |||
| 2 | * The USB Monitor, inspired by Dave Harding's USBMon. | 2 | * The USB Monitor, inspired by Dave Harding's USBMon. |
| 3 | * | 3 | * |
| 4 | * mon_main.c: Main file, module initiation and exit, registrations, etc. | 4 | * mon_main.c: Main file, module initiation and exit, registrations, etc. |
| 5 | * | ||
| 6 | * Copyright (C) 2005 Pete Zaitcev (zaitcev@redhat.com) | ||
| 5 | */ | 7 | */ |
| 6 | 8 | ||
| 7 | #include <linux/kernel.h> | 9 | #include <linux/kernel.h> |
| @@ -311,7 +313,7 @@ static int __init mon_init(void) | |||
| 311 | 313 | ||
| 312 | mondir = debugfs_create_dir("usbmon", NULL); | 314 | mondir = debugfs_create_dir("usbmon", NULL); |
| 313 | if (IS_ERR(mondir)) { | 315 | if (IS_ERR(mondir)) { |
| 314 | printk(KERN_NOTICE TAG ": debugs is not available\n"); | 316 | printk(KERN_NOTICE TAG ": debugfs is not available\n"); |
| 315 | return -ENODEV; | 317 | return -ENODEV; |
| 316 | } | 318 | } |
| 317 | if (mondir == NULL) { | 319 | if (mondir == NULL) { |
diff --git a/drivers/usb/mon/usb_mon.h b/drivers/usb/mon/usb_mon.h index ed35c18a5c44..9b06784d2c48 100644 --- a/drivers/usb/mon/usb_mon.h +++ b/drivers/usb/mon/usb_mon.h | |||
| @@ -1,5 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * The USB Monitor, inspired by Dave Harding's USBMon. | 2 | * The USB Monitor, inspired by Dave Harding's USBMon. |
| 3 | * | ||
| 4 | * Copyright (C) 2005 Pete Zaitcev (zaitcev@redhat.com) | ||
| 3 | */ | 5 | */ |
| 4 | 6 | ||
| 5 | #ifndef __USB_MON_H | 7 | #ifndef __USB_MON_H |
diff --git a/fs/jfs/inode.c b/fs/jfs/inode.c index 2137138c59b0..767c7ecb429e 100644 --- a/fs/jfs/inode.c +++ b/fs/jfs/inode.c | |||
| @@ -128,6 +128,10 @@ void jfs_delete_inode(struct inode *inode) | |||
| 128 | { | 128 | { |
| 129 | jfs_info("In jfs_delete_inode, inode = 0x%p", inode); | 129 | jfs_info("In jfs_delete_inode, inode = 0x%p", inode); |
| 130 | 130 | ||
| 131 | if (is_bad_inode(inode) || | ||
| 132 | (JFS_IP(inode)->fileset != cpu_to_le32(FILESYSTEM_I))) | ||
| 133 | return; | ||
| 134 | |||
| 131 | if (test_cflag(COMMIT_Freewmap, inode)) | 135 | if (test_cflag(COMMIT_Freewmap, inode)) |
| 132 | jfs_free_zero_link(inode); | 136 | jfs_free_zero_link(inode); |
| 133 | 137 | ||
diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c index 22815e88e7cc..d27bac6acaa3 100644 --- a/fs/jfs/jfs_logmgr.c +++ b/fs/jfs/jfs_logmgr.c | |||
| @@ -191,7 +191,7 @@ static int lbmIOWait(struct lbuf * bp, int flag); | |||
| 191 | static bio_end_io_t lbmIODone; | 191 | static bio_end_io_t lbmIODone; |
| 192 | static void lbmStartIO(struct lbuf * bp); | 192 | static void lbmStartIO(struct lbuf * bp); |
| 193 | static void lmGCwrite(struct jfs_log * log, int cant_block); | 193 | static void lmGCwrite(struct jfs_log * log, int cant_block); |
| 194 | static int lmLogSync(struct jfs_log * log, int nosyncwait); | 194 | static int lmLogSync(struct jfs_log * log, int hard_sync); |
| 195 | 195 | ||
| 196 | 196 | ||
| 197 | 197 | ||
| @@ -915,19 +915,17 @@ static void lmPostGC(struct lbuf * bp) | |||
| 915 | * if new sync address is available | 915 | * if new sync address is available |
| 916 | * (normally the case if sync() is executed by back-ground | 916 | * (normally the case if sync() is executed by back-ground |
| 917 | * process). | 917 | * process). |
| 918 | * if not, explicitly run jfs_blogsync() to initiate | ||
| 919 | * getting of new sync address. | ||
| 920 | * calculate new value of i_nextsync which determines when | 918 | * calculate new value of i_nextsync which determines when |
| 921 | * this code is called again. | 919 | * this code is called again. |
| 922 | * | 920 | * |
| 923 | * PARAMETERS: log - log structure | 921 | * PARAMETERS: log - log structure |
| 924 | * nosyncwait - 1 if called asynchronously | 922 | * hard_sync - 1 to force all metadata to be written |
| 925 | * | 923 | * |
| 926 | * RETURN: 0 | 924 | * RETURN: 0 |
| 927 | * | 925 | * |
| 928 | * serialization: LOG_LOCK() held on entry/exit | 926 | * serialization: LOG_LOCK() held on entry/exit |
| 929 | */ | 927 | */ |
| 930 | static int lmLogSync(struct jfs_log * log, int nosyncwait) | 928 | static int lmLogSync(struct jfs_log * log, int hard_sync) |
| 931 | { | 929 | { |
| 932 | int logsize; | 930 | int logsize; |
| 933 | int written; /* written since last syncpt */ | 931 | int written; /* written since last syncpt */ |
| @@ -941,11 +939,18 @@ static int lmLogSync(struct jfs_log * log, int nosyncwait) | |||
| 941 | unsigned long flags; | 939 | unsigned long flags; |
| 942 | 940 | ||
| 943 | /* push dirty metapages out to disk */ | 941 | /* push dirty metapages out to disk */ |
| 944 | list_for_each_entry(sbi, &log->sb_list, log_list) { | 942 | if (hard_sync) |
| 945 | filemap_flush(sbi->ipbmap->i_mapping); | 943 | list_for_each_entry(sbi, &log->sb_list, log_list) { |
| 946 | filemap_flush(sbi->ipimap->i_mapping); | 944 | filemap_fdatawrite(sbi->ipbmap->i_mapping); |
| 947 | filemap_flush(sbi->direct_inode->i_mapping); | 945 | filemap_fdatawrite(sbi->ipimap->i_mapping); |
| 948 | } | 946 | filemap_fdatawrite(sbi->direct_inode->i_mapping); |
| 947 | } | ||
| 948 | else | ||
| 949 | list_for_each_entry(sbi, &log->sb_list, log_list) { | ||
| 950 | filemap_flush(sbi->ipbmap->i_mapping); | ||
| 951 | filemap_flush(sbi->ipimap->i_mapping); | ||
| 952 | filemap_flush(sbi->direct_inode->i_mapping); | ||
| 953 | } | ||
| 949 | 954 | ||
| 950 | /* | 955 | /* |
| 951 | * forward syncpt | 956 | * forward syncpt |
| @@ -1021,10 +1026,6 @@ static int lmLogSync(struct jfs_log * log, int nosyncwait) | |||
| 1021 | /* next syncpt trigger = written + more */ | 1026 | /* next syncpt trigger = written + more */ |
| 1022 | log->nextsync = written + more; | 1027 | log->nextsync = written + more; |
| 1023 | 1028 | ||
| 1024 | /* return if lmLogSync() from outside of transaction, e.g., sync() */ | ||
| 1025 | if (nosyncwait) | ||
| 1026 | return lsn; | ||
| 1027 | |||
| 1028 | /* if number of bytes written from last sync point is more | 1029 | /* if number of bytes written from last sync point is more |
| 1029 | * than 1/4 of the log size, stop new transactions from | 1030 | * than 1/4 of the log size, stop new transactions from |
| 1030 | * starting until all current transactions are completed | 1031 | * starting until all current transactions are completed |
| @@ -1049,11 +1050,12 @@ static int lmLogSync(struct jfs_log * log, int nosyncwait) | |||
| 1049 | * | 1050 | * |
| 1050 | * FUNCTION: write log SYNCPT record for specified log | 1051 | * FUNCTION: write log SYNCPT record for specified log |
| 1051 | * | 1052 | * |
| 1052 | * PARAMETERS: log - log structure | 1053 | * PARAMETERS: log - log structure |
| 1054 | * hard_sync - set to 1 to force metadata to be written | ||
| 1053 | */ | 1055 | */ |
| 1054 | void jfs_syncpt(struct jfs_log *log) | 1056 | void jfs_syncpt(struct jfs_log *log, int hard_sync) |
| 1055 | { LOG_LOCK(log); | 1057 | { LOG_LOCK(log); |
| 1056 | lmLogSync(log, 1); | 1058 | lmLogSync(log, hard_sync); |
| 1057 | LOG_UNLOCK(log); | 1059 | LOG_UNLOCK(log); |
| 1058 | } | 1060 | } |
| 1059 | 1061 | ||
diff --git a/fs/jfs/jfs_logmgr.h b/fs/jfs/jfs_logmgr.h index 747114cd38b8..e4978b5b65ee 100644 --- a/fs/jfs/jfs_logmgr.h +++ b/fs/jfs/jfs_logmgr.h | |||
| @@ -510,6 +510,6 @@ extern int lmLogFormat(struct jfs_log *log, s64 logAddress, int logSize); | |||
| 510 | extern int lmGroupCommit(struct jfs_log *, struct tblock *); | 510 | extern int lmGroupCommit(struct jfs_log *, struct tblock *); |
| 511 | extern int jfsIOWait(void *); | 511 | extern int jfsIOWait(void *); |
| 512 | extern void jfs_flush_journal(struct jfs_log * log, int wait); | 512 | extern void jfs_flush_journal(struct jfs_log * log, int wait); |
| 513 | extern void jfs_syncpt(struct jfs_log *log); | 513 | extern void jfs_syncpt(struct jfs_log *log, int hard_sync); |
| 514 | 514 | ||
| 515 | #endif /* _H_JFS_LOGMGR */ | 515 | #endif /* _H_JFS_LOGMGR */ |
diff --git a/fs/jfs/jfs_txnmgr.c b/fs/jfs/jfs_txnmgr.c index 121c981ff453..c7a92f9deb2b 100644 --- a/fs/jfs/jfs_txnmgr.c +++ b/fs/jfs/jfs_txnmgr.c | |||
| @@ -552,6 +552,11 @@ void txEnd(tid_t tid) | |||
| 552 | * synchronize with logsync barrier | 552 | * synchronize with logsync barrier |
| 553 | */ | 553 | */ |
| 554 | if (test_bit(log_SYNCBARRIER, &log->flag)) { | 554 | if (test_bit(log_SYNCBARRIER, &log->flag)) { |
| 555 | TXN_UNLOCK(); | ||
| 556 | |||
| 557 | /* write dirty metadata & forward log syncpt */ | ||
| 558 | jfs_syncpt(log, 1); | ||
| 559 | |||
| 555 | jfs_info("log barrier off: 0x%x", log->lsn); | 560 | jfs_info("log barrier off: 0x%x", log->lsn); |
| 556 | 561 | ||
| 557 | /* enable new transactions start */ | 562 | /* enable new transactions start */ |
| @@ -560,11 +565,6 @@ void txEnd(tid_t tid) | |||
| 560 | /* wakeup all waitors for logsync barrier */ | 565 | /* wakeup all waitors for logsync barrier */ |
| 561 | TXN_WAKEUP(&log->syncwait); | 566 | TXN_WAKEUP(&log->syncwait); |
| 562 | 567 | ||
| 563 | TXN_UNLOCK(); | ||
| 564 | |||
| 565 | /* forward log syncpt */ | ||
| 566 | jfs_syncpt(log); | ||
| 567 | |||
| 568 | goto wakeup; | 568 | goto wakeup; |
| 569 | } | 569 | } |
| 570 | } | 570 | } |
| @@ -657,7 +657,9 @@ struct tlock *txLock(tid_t tid, struct inode *ip, struct metapage * mp, | |||
| 657 | /* only anonymous txn. | 657 | /* only anonymous txn. |
| 658 | * Remove from anon_list | 658 | * Remove from anon_list |
| 659 | */ | 659 | */ |
| 660 | TXN_LOCK(); | ||
| 660 | list_del_init(&jfs_ip->anon_inode_list); | 661 | list_del_init(&jfs_ip->anon_inode_list); |
| 662 | TXN_UNLOCK(); | ||
| 661 | } | 663 | } |
| 662 | jfs_ip->atlhead = tlck->next; | 664 | jfs_ip->atlhead = tlck->next; |
| 663 | } else { | 665 | } else { |
diff --git a/fs/jfs/super.c b/fs/jfs/super.c index ee32211288ce..9ff89720f93b 100644 --- a/fs/jfs/super.c +++ b/fs/jfs/super.c | |||
| @@ -114,6 +114,8 @@ static void jfs_destroy_inode(struct inode *inode) | |||
| 114 | { | 114 | { |
| 115 | struct jfs_inode_info *ji = JFS_IP(inode); | 115 | struct jfs_inode_info *ji = JFS_IP(inode); |
| 116 | 116 | ||
| 117 | BUG_ON(!list_empty(&ji->anon_inode_list)); | ||
| 118 | |||
| 117 | spin_lock_irq(&ji->ag_lock); | 119 | spin_lock_irq(&ji->ag_lock); |
| 118 | if (ji->active_ag != -1) { | 120 | if (ji->active_ag != -1) { |
| 119 | struct bmap *bmap = JFS_SBI(inode->i_sb)->bmap; | 121 | struct bmap *bmap = JFS_SBI(inode->i_sb)->bmap; |
| @@ -531,7 +533,7 @@ static int jfs_sync_fs(struct super_block *sb, int wait) | |||
| 531 | /* log == NULL indicates read-only mount */ | 533 | /* log == NULL indicates read-only mount */ |
| 532 | if (log) { | 534 | if (log) { |
| 533 | jfs_flush_journal(log, wait); | 535 | jfs_flush_journal(log, wait); |
| 534 | jfs_syncpt(log); | 536 | jfs_syncpt(log, 0); |
| 535 | } | 537 | } |
| 536 | 538 | ||
| 537 | return 0; | 539 | return 0; |
diff --git a/include/asm-i386/processor.h b/include/asm-i386/processor.h index 5d06e6bd6ba0..d0d8b0160090 100644 --- a/include/asm-i386/processor.h +++ b/include/asm-i386/processor.h | |||
| @@ -29,7 +29,7 @@ struct desc_struct { | |||
| 29 | }; | 29 | }; |
| 30 | 30 | ||
| 31 | #define desc_empty(desc) \ | 31 | #define desc_empty(desc) \ |
| 32 | (!((desc)->a + (desc)->b)) | 32 | (!((desc)->a | (desc)->b)) |
| 33 | 33 | ||
| 34 | #define desc_equal(desc1, desc2) \ | 34 | #define desc_equal(desc1, desc2) \ |
| 35 | (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b)) | 35 | (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b)) |
diff --git a/include/asm-ppc64/iSeries/LparMap.h b/include/asm-ppc64/iSeries/LparMap.h index 5c32e38c1c01..a6840b186d03 100644 --- a/include/asm-ppc64/iSeries/LparMap.h +++ b/include/asm-ppc64/iSeries/LparMap.h | |||
| @@ -19,6 +19,8 @@ | |||
| 19 | #ifndef _LPARMAP_H | 19 | #ifndef _LPARMAP_H |
| 20 | #define _LPARMAP_H | 20 | #define _LPARMAP_H |
| 21 | 21 | ||
| 22 | #ifndef __ASSEMBLY__ | ||
| 23 | |||
| 22 | #include <asm/types.h> | 24 | #include <asm/types.h> |
| 23 | 25 | ||
| 24 | /* | 26 | /* |
| @@ -71,6 +73,11 @@ struct LparMap { | |||
| 71 | } xRanges[HvRangesToMap]; | 73 | } xRanges[HvRangesToMap]; |
| 72 | }; | 74 | }; |
| 73 | 75 | ||
| 74 | extern struct LparMap xLparMap; | 76 | extern const struct LparMap xLparMap; |
| 77 | |||
| 78 | #endif /* __ASSEMBLY__ */ | ||
| 79 | |||
| 80 | /* the fixed address where the LparMap exists */ | ||
| 81 | #define LPARMAP_PHYS 0x7000 | ||
| 75 | 82 | ||
| 76 | #endif /* _LPARMAP_H */ | 83 | #endif /* _LPARMAP_H */ |
diff --git a/include/asm-x86_64/processor.h b/include/asm-x86_64/processor.h index 106f666517bb..85549e656eeb 100644 --- a/include/asm-x86_64/processor.h +++ b/include/asm-x86_64/processor.h | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | #define ID_MASK 0x00200000 | 32 | #define ID_MASK 0x00200000 |
| 33 | 33 | ||
| 34 | #define desc_empty(desc) \ | 34 | #define desc_empty(desc) \ |
| 35 | (!((desc)->a + (desc)->b)) | 35 | (!((desc)->a | (desc)->b)) |
| 36 | 36 | ||
| 37 | #define desc_equal(desc1, desc2) \ | 37 | #define desc_equal(desc1, desc2) \ |
| 38 | (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b)) | 38 | (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b)) |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 8621cf42b46f..bc4c40000c0d 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
| @@ -556,7 +556,8 @@ struct pci_dev { | |||
| 556 | /* keep track of device state */ | 556 | /* keep track of device state */ |
| 557 | unsigned int is_enabled:1; /* pci_enable_device has been called */ | 557 | unsigned int is_enabled:1; /* pci_enable_device has been called */ |
| 558 | unsigned int is_busmaster:1; /* device is busmaster */ | 558 | unsigned int is_busmaster:1; /* device is busmaster */ |
| 559 | 559 | unsigned int no_msi:1; /* device may not use msi */ | |
| 560 | |||
| 560 | u32 saved_config_space[16]; /* config space saved at suspend time */ | 561 | u32 saved_config_space[16]; /* config space saved at suspend time */ |
| 561 | struct bin_attribute *rom_attr; /* attribute descriptor for sysfs ROM entry */ | 562 | struct bin_attribute *rom_attr; /* attribute descriptor for sysfs ROM entry */ |
| 562 | int rom_attr_enabled; /* has display of the rom attribute been enabled? */ | 563 | int rom_attr_enabled; /* has display of the rom attribute been enabled? */ |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index bc4cc10fabe9..51e61e96051c 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -2281,6 +2281,11 @@ | |||
| 2281 | #define PCI_VENDOR_ID_INTEL 0x8086 | 2281 | #define PCI_VENDOR_ID_INTEL 0x8086 |
| 2282 | #define PCI_DEVICE_ID_INTEL_EESSC 0x0008 | 2282 | #define PCI_DEVICE_ID_INTEL_EESSC 0x0008 |
| 2283 | #define PCI_DEVICE_ID_INTEL_21145 0x0039 | 2283 | #define PCI_DEVICE_ID_INTEL_21145 0x0039 |
| 2284 | #define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320 | ||
| 2285 | #define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321 | ||
| 2286 | #define PCI_DEVICE_ID_INTEL_PXH_0 0x0329 | ||
| 2287 | #define PCI_DEVICE_ID_INTEL_PXH_1 0x032A | ||
| 2288 | #define PCI_DEVICE_ID_INTEL_PXHV 0x032C | ||
| 2284 | #define PCI_DEVICE_ID_INTEL_82375 0x0482 | 2289 | #define PCI_DEVICE_ID_INTEL_82375 0x0482 |
| 2285 | #define PCI_DEVICE_ID_INTEL_82424 0x0483 | 2290 | #define PCI_DEVICE_ID_INTEL_82424 0x0483 |
| 2286 | #define PCI_DEVICE_ID_INTEL_82378 0x0484 | 2291 | #define PCI_DEVICE_ID_INTEL_82378 0x0484 |
