Commit 01fa90cb authored by Dave Kleikamp's avatar Dave Kleikamp

Merge with /home/shaggy/git/linus-clean/

parents 686762c8 2ad56496
...@@ -33,3 +33,6 @@ The result of the execution of this aml method is ...@@ -33,3 +33,6 @@ The result of the execution of this aml method is
attached to /proc/acpi/hotkey/poll_method, which is dnyamically attached to /proc/acpi/hotkey/poll_method, which is dnyamically
created. Please use command "cat /proc/acpi/hotkey/polling_method" created. Please use command "cat /proc/acpi/hotkey/polling_method"
to retrieve it. to retrieve it.
Note: Use cmdline "acpi_generic_hotkey" to over-ride
loading any platform specific drivers.
...@@ -159,6 +159,11 @@ running once the system is up. ...@@ -159,6 +159,11 @@ running once the system is up.
acpi_fake_ecdt [HW,ACPI] Workaround failure due to BIOS lacking ECDT acpi_fake_ecdt [HW,ACPI] Workaround failure due to BIOS lacking ECDT
acpi_generic_hotkey [HW,ACPI]
Allow consolidated generic hotkey driver to
over-ride platform specific driver.
See also Documentation/acpi-hotkey.txt.
ad1816= [HW,OSS] ad1816= [HW,OSS]
Format: <io>,<irq>,<dma>,<dma2> Format: <io>,<irq>,<dma>,<dma2>
See also Documentation/sound/oss/AD1816. See also Documentation/sound/oss/AD1816.
......
...@@ -266,20 +266,6 @@ port an old driver to the new PCI interface. They are no longer present ...@@ -266,20 +266,6 @@ port an old driver to the new PCI interface. They are no longer present
in the kernel as they aren't compatible with hotplug or PCI domains or in the kernel as they aren't compatible with hotplug or PCI domains or
having sane locking. having sane locking.
pcibios_present() and Since ages, you don't need to test presence
pci_present() of PCI subsystem when trying to talk to it.
If it's not there, the list of PCI devices
is empty and all functions for searching for
devices just return NULL.
pcibios_(read|write)_* Superseded by their pci_(read|write)_*
counterparts.
pcibios_find_* Superseded by their pci_get_* counterparts.
pci_for_each_dev() Superseded by pci_get_device()
pci_for_each_dev_reverse() Superseded by pci_find_device_reverse()
pci_for_each_bus() Superseded by pci_find_next_bus()
pci_find_device() Superseded by pci_get_device() pci_find_device() Superseded by pci_get_device()
pci_find_subsys() Superseded by pci_get_subsys() pci_find_subsys() Superseded by pci_get_subsys()
pci_find_slot() Superseded by pci_get_slot() pci_find_slot() Superseded by pci_get_slot()
pcibios_find_class() Superseded by pci_get_class()
pci_find_class() Superseded by pci_get_class()
pci_(read|write)_*_nodev() Superseded by pci_bus_(read|write)_*()
...@@ -1825,6 +1825,12 @@ P: Greg Kroah-Hartman ...@@ -1825,6 +1825,12 @@ P: Greg Kroah-Hartman
M: greg@kroah.com M: greg@kroah.com
S: Maintained S: Maintained
PCIE HOTPLUG DRIVER
P: Kristen Carlson Accardi
M: kristen.c.accardi@intel.com
L: pcihpd-discuss@lists.sourceforge.net
S: Maintained
PCMCIA SUBSYSTEM PCMCIA SUBSYSTEM
P: Linux PCMCIA Team P: Linux PCMCIA Team
L: http://lists.infradead.org/mailman/listinfo/linux-pcmcia L: http://lists.infradead.org/mailman/listinfo/linux-pcmcia
...@@ -2201,6 +2207,12 @@ W: http://projects.buici.com/arm ...@@ -2201,6 +2207,12 @@ W: http://projects.buici.com/arm
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
S: Maintained S: Maintained
SHPC HOTPLUG DRIVER
P: Kristen Carlson Accardi
M: kristen.c.accardi@intel.com
L: pcihpd-discuss@lists.sourceforge.net
S: Maintained
SPARC (sparc32): SPARC (sparc32):
P: William L. Irwin P: William L. Irwin
M: wli@holomorphy.com M: wli@holomorphy.com
......
...@@ -32,32 +32,12 @@ ...@@ -32,32 +32,12 @@
/* The HvReleaseData is the root of the information shared between /* The HvReleaseData is the root of the information shared between
* the hypervisor and Linux. * the hypervisor and Linux.
*/ */
/*
* WARNING - magic here
*
* Ok, this is a horrid hack below, but marginally better than the
* alternatives. What we really want is just to initialize
* hvReleaseData in C as in the #if 0 section here. However, gcc
* refuses to believe that (u32)&x is a constant expression, so will
* not allow the xMsNucDataOffset field to be properly initialized.
* So, we declare hvReleaseData in inline asm instead. We use inline
* asm, rather than a .S file, because the assembler won't generate
* the necessary relocation for the LparMap either, unless that symbol
* is declared in the same source file. Finally, we put the asm in a
* dummy, attribute-used function, instead of at file scope, because
* file scope asms don't allow contraints. We want to use the "i"
* constraints to put sizeof() and offsetof() expressions in there,
* because including asm/offsets.h in C code then stringifying causes
* all manner of warnings.
*/
#if 0
struct HvReleaseData hvReleaseData = { struct HvReleaseData hvReleaseData = {
.xDesc = 0xc8a5d9c4, /* "HvRD" ebcdic */ .xDesc = 0xc8a5d9c4, /* "HvRD" ebcdic */
.xSize = sizeof(struct HvReleaseData), .xSize = sizeof(struct HvReleaseData),
.xVpdAreasPtrOffset = offsetof(struct naca_struct, xItVpdAreas), .xVpdAreasPtrOffset = offsetof(struct naca_struct, xItVpdAreas),
.xSlicNacaAddr = &naca, /* 64-bit Naca address */ .xSlicNacaAddr = &naca, /* 64-bit Naca address */
.xMsNucDataOffset = (u32)((unsigned long)&xLparMap - KERNELBASE), .xMsNucDataOffset = LPARMAP_PHYS,
.xFlags = HVREL_TAGSINACTIVE /* tags inactive */ .xFlags = HVREL_TAGSINACTIVE /* tags inactive */
/* 64 bit */ /* 64 bit */
/* shared processors */ /* shared processors */
...@@ -70,63 +50,6 @@ struct HvReleaseData hvReleaseData = { ...@@ -70,63 +50,6 @@ struct HvReleaseData hvReleaseData = {
0xa7, 0x40, 0xf2, 0x4b, 0xa7, 0x40, 0xf2, 0x4b,
0xf4, 0x4b, 0xf6, 0xf4 }, 0xf4, 0x4b, 0xf6, 0xf4 },
}; };
#endif
extern struct HvReleaseData hvReleaseData;
static void __attribute_used__ hvReleaseData_wrapper(void)
{
/* This doesn't appear to need any alignment (even 4 byte) */
asm volatile (
" lparMapPhys = xLparMap - %3\n"
" .data\n"
" .globl hvReleaseData\n"
"hvReleaseData:\n"
" .long 0xc8a5d9c4\n" /* xDesc */
/* "HvRD" in ebcdic */
" .short %0\n" /* xSize */
" .short %1\n" /* xVpdAreasPtrOffset */
" .llong naca\n" /* xSlicNacaAddr */
" .long lparMapPhys\n" /* xMsNucDataOffset */
" .long 0\n" /* xRsvd1 */
" .short %2\n" /* xFlags */
" .short 4\n" /* xVrmIndex - v5r2m0 */
" .short 3\n" /* xMinSupportedPlicVrmIndex - v5r1m0 */
" .short 3\n" /* xMinCompatablePlicVrmIndex - v5r1m0 */
" .long 0xd38995a4\n" /* xVrmName */
" .long 0xa740f24b\n" /* "Linux 2.4.64" ebcdic */
" .long 0xf44bf6f4\n"
" . = hvReleaseData + %0\n"
" .previous\n"
: : "i"(sizeof(hvReleaseData)),
"i"(offsetof(struct naca_struct, xItVpdAreas)),
"i"(HVREL_TAGSINACTIVE /* tags inactive, 64 bit, */
/* shared processors, HMT allowed */
| 6), /* TEMP: This allows non-GA drivers */
"i"(KERNELBASE)
);
}
struct LparMap __attribute__((aligned (16))) xLparMap = {
.xNumberEsids = HvEsidsToMap,
.xNumberRanges = HvRangesToMap,
.xSegmentTableOffs = STAB0_PAGE,
.xEsids = {
{ .xKernelEsid = GET_ESID(KERNELBASE),
.xKernelVsid = KERNEL_VSID(KERNELBASE), },
{ .xKernelEsid = GET_ESID(VMALLOCBASE),
.xKernelVsid = KERNEL_VSID(VMALLOCBASE), },
},
.xRanges = {
{ .xPages = HvPagesToMap,
.xOffset = 0,
.xVPN = KERNEL_VSID(KERNELBASE) << (SID_SHIFT - PAGE_SHIFT),
},
},
};
extern void system_reset_iSeries(void); extern void system_reset_iSeries(void);
extern void machine_check_iSeries(void); extern void machine_check_iSeries(void);
......
...@@ -73,3 +73,8 @@ obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o ...@@ -73,3 +73,8 @@ obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o
obj-$(CONFIG_KPROBES) += kprobes.o obj-$(CONFIG_KPROBES) += kprobes.o
CFLAGS_ioctl32.o += -Ifs/ CFLAGS_ioctl32.o += -Ifs/
ifeq ($(CONFIG_PPC_ISERIES),y)
arch/ppc64/kernel/head.o: arch/ppc64/kernel/lparmap.s
AFLAGS_head.o += -Iarch/ppc64/kernel
endif
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <asm/cputable.h> #include <asm/cputable.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/hvcall.h> #include <asm/hvcall.h>
#include <asm/iSeries/LparMap.h>
#ifdef CONFIG_PPC_ISERIES #ifdef CONFIG_PPC_ISERIES
#define DO_SOFT_DISABLE #define DO_SOFT_DISABLE
...@@ -679,6 +680,11 @@ hardware_interrupt_iSeries_masked: ...@@ -679,6 +680,11 @@ hardware_interrupt_iSeries_masked:
.globl fwnmi_data_area .globl fwnmi_data_area
fwnmi_data_area: fwnmi_data_area:
#ifdef CONFIG_PPC_ISERIES
. = LPARMAP_PHYS
#include "lparmap.s"
#endif /* CONFIG_PPC_ISERIES */
/* /*
* Vectors for the FWNMI option. Share common code. * Vectors for the FWNMI option. Share common code.
*/ */
......
/*
* Copyright (C) 2005 Stephen Rothwell IBM Corp.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#include <asm/mmu.h>
#include <asm/page.h>
#include <asm/iSeries/LparMap.h>
const struct LparMap __attribute__((__section__(".text"))) xLparMap = {
.xNumberEsids = HvEsidsToMap,
.xNumberRanges = HvRangesToMap,
.xSegmentTableOffs = STAB0_PAGE,
.xEsids = {
{ .xKernelEsid = GET_ESID(KERNELBASE),
.xKernelVsid = KERNEL_VSID(KERNELBASE), },
{ .xKernelEsid = GET_ESID(VMALLOCBASE),
.xKernelVsid = KERNEL_VSID(VMALLOCBASE), },
},
.xRanges = {
{ .xPages = HvPagesToMap,
.xOffset = 0,
.xVPN = KERNEL_VSID(KERNELBASE) << (SID_SHIFT - PAGE_SHIFT),
},
},
};
...@@ -71,7 +71,7 @@ EXPORT_SYMBOL(acpi_in_debugger); ...@@ -71,7 +71,7 @@ EXPORT_SYMBOL(acpi_in_debugger);
extern char line_buf[80]; extern char line_buf[80];
#endif /*ENABLE_DEBUGGER*/ #endif /*ENABLE_DEBUGGER*/
int acpi_specific_hotkey_enabled; int acpi_specific_hotkey_enabled = TRUE;
EXPORT_SYMBOL(acpi_specific_hotkey_enabled); EXPORT_SYMBOL(acpi_specific_hotkey_enabled);
static unsigned int acpi_irq_irq; static unsigned int acpi_irq_irq;
...@@ -1162,11 +1162,11 @@ __setup("acpi_wake_gpes_always_on", acpi_wake_gpes_always_on_setup); ...@@ -1162,11 +1162,11 @@ __setup("acpi_wake_gpes_always_on", acpi_wake_gpes_always_on_setup);
int __init int __init
acpi_hotkey_setup(char *str) acpi_hotkey_setup(char *str)
{ {
acpi_specific_hotkey_enabled = TRUE; acpi_specific_hotkey_enabled = FALSE;
return 1; return 1;
} }
__setup("acpi_specific_hotkey", acpi_hotkey_setup); __setup("acpi_generic_hotkey", acpi_hotkey_setup);
/* /*
* max_cstate is defined in the base kernel so modules can * max_cstate is defined in the base kernel so modules can
......
...@@ -299,6 +299,11 @@ static void class_dev_release(struct kobject * kobj) ...@@ -299,6 +299,11 @@ static void class_dev_release(struct kobject * kobj)
pr_debug("device class '%s': release.\n", cd->class_id); pr_debug("device class '%s': release.\n", cd->class_id);
if (cd->devt_attr) {
kfree(cd->devt_attr);
cd->devt_attr = NULL;
}
if (cls->release) if (cls->release)
cls->release(cd); cls->release(cd);
else { else {
...@@ -591,11 +596,8 @@ void class_device_del(struct class_device *class_dev) ...@@ -591,11 +596,8 @@ void class_device_del(struct class_device *class_dev)
if (class_dev->dev) if (class_dev->dev)
sysfs_remove_link(&class_dev->kobj, "device"); sysfs_remove_link(&class_dev->kobj, "device");
if (class_dev->devt_attr) { if (class_dev->devt_attr)
class_device_remove_file(class_dev, class_dev->devt_attr); class_device_remove_file(class_dev, class_dev->devt_attr);
kfree(class_dev->devt_attr);
class_dev->devt_attr = NULL;
}
class_device_remove_attrs(class_dev); class_device_remove_attrs(class_dev);
kobject_hotplug(&class_dev->kobj, KOBJ_REMOVE); kobject_hotplug(&class_dev->kobj, KOBJ_REMOVE);
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
#ifndef _PCIEHP_H #ifndef _PCIEHP_H
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>,<dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <dely.l.sy@intel.com> * Send feedback to <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>,<dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com>
* *
*/ */
#ifndef _SHPCHP_H #ifndef _SHPCHP_H
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>,<dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <dely.l.sy@intel.com> * Send feedback to <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>,<dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *
* Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
* *
*/ */
......
...@@ -453,7 +453,7 @@ static void enable_msi_mode(struct pci_dev *dev, int pos, int type) ...@@ -453,7 +453,7 @@ static void enable_msi_mode(struct pci_dev *dev, int pos, int type)
} }
} }
static void disable_msi_mode(struct pci_dev *dev, int pos, int type) void disable_msi_mode(struct pci_dev *dev, int pos, int type)
{ {
u16 control; u16 control;
...@@ -699,6 +699,9 @@ int pci_enable_msi(struct pci_dev* dev) ...@@ -699,6 +699,9 @@ int pci_enable_msi(struct pci_dev* dev)
if (!pci_msi_enable || !dev) if (!pci_msi_enable || !dev)
return status; return status;
if (dev->no_msi)
return status;
temp = dev->irq; temp = dev->irq;
if ((status = msi_init()) < 0) if ((status = msi_init()) < 0)
......
...@@ -47,6 +47,12 @@ extern int pci_msi_quirk; ...@@ -47,6 +47,12 @@ extern int pci_msi_quirk;
#define pci_msi_quirk 0 #define pci_msi_quirk 0
#endif #endif
#ifdef CONFIG_PCI_MSI
void disable_msi_mode(struct pci_dev *dev, int pos, int type);
#else
static inline void disable_msi_mode(struct pci_dev *dev, int pos, int type) { }
#endif
extern int pcie_mch_quirk; extern int pcie_mch_quirk;
extern struct device_attribute pci_dev_attrs[]; extern struct device_attribute pci_dev_attrs[];
extern struct class_device_attribute class_device_attr_cpuaffinity; extern struct class_device_attribute class_device_attr_cpuaffinity;
......
...@@ -1291,6 +1291,27 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7520_MCH, quir ...@@ -1291,6 +1291,27 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7520_MCH, quir
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7320_MCH, quirk_pcie_mch ); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7320_MCH, quirk_pcie_mch );
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, quirk_pcie_mch ); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, quirk_pcie_mch );
/*
* It's possible for the MSI to get corrupted if shpc and acpi
* are used together on certain PXH-based systems.
*/
static void __devinit quirk_pcie_pxh(struct pci_dev *dev)
{
disable_msi_mode(dev, pci_find_capability(dev, PCI_CAP_ID_MSI),
PCI_CAP_ID_MSI);
dev->no_msi = 1;
printk(KERN_WARNING "PCI: PXH quirk detected, "
"disabling MSI for SHPC device\n");
}
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHD_0, quirk_pcie_pxh);
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHD_1, quirk_pcie_pxh);
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0, quirk_pcie_pxh);
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1, quirk_pcie_pxh);
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_pcie_pxh);
static void __devinit quirk_netmos(struct pci_dev *dev) static void __devinit quirk_netmos(struct pci_dev *dev)
{ {
unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4; unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4;
......
...@@ -342,9 +342,6 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs) ...@@ -342,9 +342,6 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit; goto exit;
} }
x = le16_to_cpu(*(__le16 *) &data[2]);
y = le16_to_cpu(*(__le16 *) &data[4]);
input_regs(dev, regs); input_regs(dev, regs);
if (data[1] & 0x10) { /* in prox */ if (data[1] & 0x10) { /* in prox */
...@@ -373,15 +370,17 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs) ...@@ -373,15 +370,17 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
} }
} }
if (data[1] & 0x80) { if (data[1] & 0x90) {
x = le16_to_cpu(*(__le16 *) &data[2]);
y = le16_to_cpu(*(__le16 *) &data[4]);
input_report_abs(dev, ABS_X, x); input_report_abs(dev, ABS_X, x);
input_report_abs(dev, ABS_Y, y); input_report_abs(dev, ABS_Y, y);
} if (wacom->tool[0] != BTN_TOOL_MOUSE) {
if (wacom->tool[0] != BTN_TOOL_MOUSE) { input_report_abs(dev, ABS_PRESSURE, le16_to_cpu(*(__le16 *) &data[6]));
input_report_abs(dev, ABS_PRESSURE, le16_to_cpu(*(__le16 *) &data[6])); input_report_key(dev, BTN_TOUCH, data[1] & 0x01);
input_report_key(dev, BTN_TOUCH, data[1] & 0x01); input_report_key(dev, BTN_STYLUS, data[1] & 0x02);
input_report_key(dev, BTN_STYLUS, data[1] & 0x02); input_report_key(dev, BTN_STYLUS2, data[1] & 0x04);
input_report_key(dev, BTN_STYLUS2, data[1] & 0x04); }
} }
input_report_key(dev, wacom->tool[0], data[1] & 0x10); 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,7 +567,7 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
/* Cintiq doesn't send data when RDY bit isn't set */ /* Cintiq doesn't send data when RDY bit isn't set */
if ((wacom->features->type == CINTIQ) && !(data[1] & 0x40)) if ((wacom->features->type == CINTIQ) && !(data[1] & 0x40))
return; goto exit;
if (wacom->features->type >= INTUOS3) { if (wacom->features->type >= INTUOS3) {
input_report_abs(dev, ABS_X, (data[2] << 9) | (data[3] << 1) | ((data[9] >> 1) & 1)); input_report_abs(dev, ABS_X, (data[2] << 9) | (data[3] << 1) | ((data[9] >> 1) & 1));
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
* The USB Monitor, inspired by Dave Harding's USBMon. * The USB Monitor, inspired by Dave Harding's USBMon.
* *
* mon_main.c: Main file, module initiation and exit, registrations, etc. * mon_main.c: Main file, module initiation and exit, registrations, etc.
*
* Copyright (C) 2005 Pete Zaitcev (zaitcev@redhat.com)
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -311,7 +313,7 @@ static int __init mon_init(void) ...@@ -311,7 +313,7 @@ static int __init mon_init(void)
mondir = debugfs_create_dir("usbmon", NULL); mondir = debugfs_create_dir("usbmon", NULL);
if (IS_ERR(mondir)) { if (IS_ERR(mondir)) {
printk(KERN_NOTICE TAG ": debugs is not available\n"); printk(KERN_NOTICE TAG ": debugfs is not available\n");
return -ENODEV; return -ENODEV;
} }
if (mondir == NULL) { if (mondir == NULL) {
......
/* /*
* The USB Monitor, inspired by Dave Harding's USBMon. * The USB Monitor, inspired by Dave Harding's USBMon.
*
* Copyright (C) 2005 Pete Zaitcev (zaitcev@redhat.com)
*/ */
#ifndef __USB_MON_H #ifndef __USB_MON_H
......
...@@ -128,6 +128,10 @@ void jfs_delete_inode(struct inode *inode) ...@@ -128,6 +128,10 @@ void jfs_delete_inode(struct inode *inode)
{ {
jfs_info("In jfs_delete_inode, inode = 0x%p", inode); jfs_info("In jfs_delete_inode, inode = 0x%p", inode);
if (is_bad_inode(inode) ||
(JFS_IP(inode)->fileset != cpu_to_le32(FILESYSTEM_I)))
return;
if (test_cflag(COMMIT_Freewmap, inode)) if (test_cflag(COMMIT_Freewmap, inode))
jfs_free_zero_link(inode); jfs_free_zero_link(inode);
......
...@@ -191,7 +191,7 @@ static int lbmIOWait(struct lbuf * bp, int flag); ...@@ -191,7 +191,7 @@ static int lbmIOWait(struct lbuf * bp, int flag);
static bio_end_io_t lbmIODone; static bio_end_io_t lbmIODone;
static void lbmStartIO(struct lbuf * bp); static void lbmStartIO(struct lbuf * bp);
static void lmGCwrite(struct jfs_log * log, int cant_block); static void lmGCwrite(struct jfs_log * log, int cant_block);
static int lmLogSync(struct jfs_log * log, int nosyncwait); static int lmLogSync(struct jfs_log * log, int hard_sync);
...@@ -915,19 +915,17 @@ static void lmPostGC(struct lbuf * bp) ...@@ -915,19 +915,17 @@ static void lmPostGC(struct lbuf * bp)
* if new sync address is available * if new sync address is available
* (normally the case if sync() is executed by back-ground * (normally the case if sync() is executed by back-ground
* process). * process).
* if not, explicitly run jfs_blogsync() to initiate
* getting of new sync address.
* calculate new value of i_nextsync which determines when * calculate new value of i_nextsync which determines when
* this code is called again. * this code is called again.
* *
* PARAMETERS: log - log structure * PARAMETERS: log - log structure
* nosyncwait - 1 if called asynchronously * hard_sync - 1 to force all metadata to be written
* *
* RETURN: 0 * RETURN: 0
* *
* serialization: LOG_LOCK() held on entry/exit * serialization: LOG_LOCK() held on entry/exit
*/ */
static int lmLogSync(struct jfs_log * log, int nosyncwait) static int lmLogSync(struct jfs_log * log, int hard_sync)
{ {
int logsize; int logsize;
int written; /* written since last syncpt */ int written; /* written since last syncpt */
...@@ -941,11 +939,18 @@ static int lmLogSync(struct jfs_log * log, int nosyncwait) ...@@ -941,11 +939,18 @@ static int lmLogSync(struct jfs_log * log, int nosyncwait)
unsigned long flags; unsigned long flags;
/* push dirty metapages out to disk */ /* push dirty metapages out to disk */
list_for_each_entry(sbi, &log->sb_list, log_list) { if (hard_sync)
filemap_flush(sbi->ipbmap->i_mapping); list_for_each_entry(sbi, &log->sb_list, log_list) {
filemap_flush(sbi->ipimap->i_mapping); filemap_fdatawrite(sbi->ipbmap->i_mapping);
filemap_flush(sbi->direct_inode->i_mapping); filemap_fdatawrite(sbi->ipimap->i_mapping);
} filemap_fdatawrite(sbi->direct_inode->i_mapping);
}
else
list_for_each_entry(sbi, &log->sb_list, log_list) {
filemap_flush(sbi->ipbmap->i_mapping);
filemap_flush(sbi->ipimap->i_mapping);
filemap_flush(sbi->direct_inode->i_mapping);
}
/* /*
* forward syncpt * forward syncpt
...@@ -1021,10 +1026,6 @@ static int lmLogSync(struct jfs_log * log, int nosyncwait) ...@@ -1021,10 +1026,6 @@ static int lmLogSync(struct jfs_log * log, int nosyncwait)
/* next syncpt trigger = written + more */ /* next syncpt trigger = written + more */
log->nextsync = written + more; log->nextsync = written + more;
/* return if lmLogSync() from outside of transaction, e.g., sync() */
if (nosyncwait)
return lsn;
/* if number of bytes written from last sync point is more /* if number of bytes written from last sync point is more
* than 1/4 of the log size, stop new transactions from * than 1/4 of the log size, stop new transactions from
* starting until all current transactions are completed * starting until all current transactions are completed
...@@ -1049,11 +1050,12 @@ static int lmLogSync(struct jfs_log * log, int nosyncwait) ...@@ -1049,11 +1050,12 @@ static int lmLogSync(struct jfs_log * log, int nosyncwait)
* *
* FUNCTION: write log SYNCPT record for specified log * FUNCTION: write log SYNCPT record for specified log
* *
* PARAMETERS: log - log structure * PARAMETERS: log - log structure
* hard_sync - set to 1 to force metadata to be written
*/ */
void jfs_syncpt(struct jfs_log *log) void jfs_syncpt(struct jfs_log *log, int hard_sync)
{ LOG_LOCK(log); { LOG_LOCK(log);
lmLogSync(log, 1); lmLogSync(log, hard_sync);
LOG_UNLOCK(log); LOG_UNLOCK(log);
} }
......
...@@ -510,6 +510,6 @@ extern int lmLogFormat(struct jfs_log *log, s64 logAddress, int logSize); ...@@ -510,6 +510,6 @@ extern int lmLogFormat(struct jfs_log *log, s64 logAddress, int logSize);
extern int lmGroupCommit(struct jfs_log *, struct tblock *); extern int lmGroupCommit(struct jfs_log *, struct tblock *);
extern int jfsIOWait(void *); extern int jfsIOWait(void *);
extern void jfs_flush_journal(struct jfs_log * log, int wait); extern void jfs_flush_journal(struct jfs_log * log, int wait);
extern void jfs_syncpt(struct jfs_log *log); extern void jfs_syncpt(struct jfs_log *log, int hard_sync);
#endif /* _H_JFS_LOGMGR */ #endif /* _H_JFS_LOGMGR */
...@@ -552,6 +552,11 @@ void txEnd(tid_t tid) ...@@ -552,6 +552,11 @@ void txEnd(tid_t tid)
* synchronize with logsync barrier * synchronize with logsync barrier
*/ */
if (test_bit(log_SYNCBARRIER, &log->flag)) { if (test_bit(log_SYNCBARRIER, &log->flag)) {
TXN_UNLOCK();
/* write dirty metadata & forward log syncpt */
jfs_syncpt(log, 1);
jfs_info("log barrier off: 0x%x", log->lsn); jfs_info("log barrier off: 0x%x", log->lsn);
/* enable new transactions start */ /* enable new transactions start */
...@@ -560,11 +565,6 @@ void txEnd(tid_t tid) ...@@ -560,11 +565,6 @@ void txEnd(tid_t tid)
/* wakeup all waitors for logsync barrier */ /* wakeup all waitors for logsync barrier */
TXN_WAKEUP(&log->syncwait); TXN_WAKEUP(&log->syncwait);
TXN_UNLOCK();
/* forward log syncpt */
jfs_syncpt(log);
goto wakeup; goto wakeup;
} }
} }
...@@ -657,7 +657,9 @@ struct tlock *txLock(tid_t tid, struct inode *ip, struct metapage * mp, ...@@ -657,7 +657,9 @@ struct tlock *txLock(tid_t tid, struct inode *ip, struct metapage * mp,
/* only anonymous txn. /* only anonymous txn.
* Remove from anon_list * Remove from anon_list
*/ */
TXN_LOCK();
list_del_init(&jfs_ip->anon_inode_list); list_del_init(&jfs_ip->anon_inode_list);
TXN_UNLOCK();
} }
jfs_ip->atlhead = tlck->next; jfs_ip->atlhead = tlck->next;
} else { } else {
......
...@@ -114,6 +114,8 @@ static void jfs_destroy_inode(struct inode *inode) ...@@ -114,6 +114,8 @@ static void jfs_destroy_inode(struct inode *inode)
{ {
struct jfs_inode_info *ji = JFS_IP(inode); struct jfs_inode_info *ji = JFS_IP(inode);
BUG_ON(!list_empty(&ji->anon_inode_list));
spin_lock_irq(&ji->ag_lock); spin_lock_irq(&ji->ag_lock);
if (ji->active_ag != -1) { if (ji->active_ag != -1) {
struct bmap *bmap = JFS_SBI(inode->i_sb)->bmap; 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,7 +533,7 @@ static int jfs_sync_fs(struct super_block *sb, int wait)
/* log == NULL indicates read-only mount */ /* log == NULL indicates read-only mount */
if (log) { if (log) {
jfs_flush_journal(log, wait); jfs_flush_journal(log, wait);
jfs_syncpt(log); jfs_syncpt(log, 0);
} }
return 0; return 0;
......
...@@ -29,7 +29,7 @@ struct desc_struct { ...@@ -29,7 +29,7 @@ struct desc_struct {
}; };
#define desc_empty(desc) \ #define desc_empty(desc) \
(!((desc)->a + (desc)->b)) (!((desc)->a | (desc)->b))
#define desc_equal(desc1, desc2) \ #define desc_equal(desc1, desc2) \
(((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b)) (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b))
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
#ifndef _LPARMAP_H #ifndef _LPARMAP_H
#define _LPARMAP_H #define _LPARMAP_H
#ifndef __ASSEMBLY__
#include <asm/types.h> #include <asm/types.h>
/* /*
...@@ -71,6 +73,11 @@ struct LparMap { ...@@ -71,6 +73,11 @@ struct LparMap {
} xRanges[HvRangesToMap]; } xRanges[HvRangesToMap];
}; };
extern struct LparMap xLparMap; extern const struct LparMap xLparMap;
#endif /* __ASSEMBLY__ */
/* the fixed address where the LparMap exists */
#define LPARMAP_PHYS 0x7000
#endif /* _LPARMAP_H */ #endif /* _LPARMAP_H */
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#define ID_MASK 0x00200000 #define ID_MASK 0x00200000
#define desc_empty(desc) \ #define desc_empty(desc) \
(!((desc)->a + (desc)->b)) (!((desc)->a | (desc)->b))
#define desc_equal(desc1, desc2) \ #define desc_equal(desc1, desc2) \
(((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b)) (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b))
......
...@@ -556,7 +556,8 @@ struct pci_dev { ...@@ -556,7 +556,8 @@ struct pci_dev {
/* keep track of device state */ /* keep track of device state */
unsigned int is_enabled:1; /* pci_enable_device has been called */ unsigned int is_enabled:1; /* pci_enable_device has been called */
unsigned int is_busmaster:1; /* device is busmaster */ unsigned int is_busmaster:1; /* device is busmaster */
unsigned int no_msi:1; /* device may not use msi */
u32 saved_config_space[16]; /* config space saved at suspend time */ u32 saved_config_space[16]; /* config space saved at suspend time */
struct bin_attribute *rom_attr; /* attribute descriptor for sysfs ROM entry */ struct bin_attribute *rom_attr; /* attribute descriptor for sysfs ROM entry */
int rom_attr_enabled; /* has display of the rom attribute been enabled? */ int rom_attr_enabled; /* has display of the rom attribute been enabled? */
......
...@@ -2281,6 +2281,11 @@ ...@@ -2281,6 +2281,11 @@
#define PCI_VENDOR_ID_INTEL 0x8086 #define PCI_VENDOR_ID_INTEL 0x8086
#define PCI_DEVICE_ID_INTEL_EESSC 0x0008 #define PCI_DEVICE_ID_INTEL_EESSC 0x0008
#define PCI_DEVICE_ID_INTEL_21145 0x0039 #define PCI_DEVICE_ID_INTEL_21145 0x0039
#define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320
#define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321
#define PCI_DEVICE_ID_INTEL_PXH_0 0x0329
#define PCI_DEVICE_ID_INTEL_PXH_1 0x032A
#define PCI_DEVICE_ID_INTEL_PXHV 0x032C
#define PCI_DEVICE_ID_INTEL_82375 0x0482 #define PCI_DEVICE_ID_INTEL_82375 0x0482
#define PCI_DEVICE_ID_INTEL_82424 0x0483 #define PCI_DEVICE_ID_INTEL_82424 0x0483
#define PCI_DEVICE_ID_INTEL_82378 0x0484 #define PCI_DEVICE_ID_INTEL_82378 0x0484
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment