--- /dev/null
+From stable-bounces@linux.kernel.org Sun Jan 13 23:28:07 2008
+From: Zhao Yakui <yakui.zhao@intel.com>
+Date: Mon, 14 Jan 2008 02:27:45 -0500
+Subject: ACPI: apply quirk_ich6_lpc_acpi to more ICH8 and ICH9
+To: stable@kernel.org
+Message-ID: <200801140227.45115.lenb@kernel.org>
+Content-Disposition: inline
+
+From: Zhao Yakui <yakui.zhao@intel.com>
+
+patch d1ec7298fcefd7e4d1ca612da402ce9e5d5e2c13 in mainline.
+
+It is important that these resources be reserved
+to avoid conflicts with well known ACPI registers.
+
+Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/pci/quirks.c | 6 ++++++
+ include/linux/pci_ids.h | 2 ++
+ 2 files changed, 8 insertions(+)
+
+--- a/drivers/pci/quirks.c
++++ b/drivers/pci/quirks.c
+@@ -465,6 +465,12 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_0, quirk_ich6_lpc_acpi );
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_2, quirk_ich6_lpc_acpi );
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_3, quirk_ich6_lpc_acpi );
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_1, quirk_ich6_lpc_acpi );
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_4, quirk_ich6_lpc_acpi );
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_2, quirk_ich6_lpc_acpi );
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_4, quirk_ich6_lpc_acpi );
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_7, quirk_ich6_lpc_acpi );
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_8, quirk_ich6_lpc_acpi );
+
+ /*
+ * VIA ACPI: One IO region pointed to by longword at
+--- a/include/linux/pci_ids.h
++++ b/include/linux/pci_ids.h
+@@ -2287,6 +2287,8 @@
+ #define PCI_DEVICE_ID_INTEL_ICH9_4 0x2914
+ #define PCI_DEVICE_ID_INTEL_ICH9_5 0x2919
+ #define PCI_DEVICE_ID_INTEL_ICH9_6 0x2930
++#define PCI_DEVICE_ID_INTEL_ICH9_7 0x2916
++#define PCI_DEVICE_ID_INTEL_ICH9_8 0x2918
+ #define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340
+ #define PCI_DEVICE_ID_INTEL_82830_HB 0x3575
+ #define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577
--- /dev/null
+From stable-bounces@linux.kernel.org Sun Jan 13 23:22:37 2008
+From: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Date: Mon, 14 Jan 2008 02:22:11 -0500
+Subject: ACPI: Not register gsi for PCI IDE controller in legacy mode
+To: stable@kernel.org
+Message-ID: <200801140222.11163.lenb@kernel.org>
+Content-Disposition: inline
+
+
+From: Alan Cox <alan@lxorguk.ukuu.org.uk>
+
+patch 96c2a8766bf4fe91abac863749c11637fabcc64f in mainline.
+
+When PCI IDE controller works in legacy mode and no PRT entry is found
+in ACPI PRT table, OSPM will neither read the irq number from the IDE
+PCI configuration space nor call the function of acpi_register_gsi to
+register gsi.
+
+http://bugzilla.kernel.org/show_bug.cgi?id=5637
+
+Signed-off-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
+Signed-off-by: Zhang Rui <rui.zhang@intel.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/pci_irq.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/drivers/acpi/pci_irq.c
++++ b/drivers/acpi/pci_irq.c
+@@ -429,6 +429,15 @@ int acpi_pci_irq_enable(struct pci_dev *
+ &polarity, &link,
+ acpi_pci_allocate_irq);
+
++ if (irq < 0) {
++ /*
++ * IDE legacy mode controller IRQs are magic. Why do compat
++ * extensions always make such a nasty mess.
++ */
++ if (dev->class >> 8 == PCI_CLASS_STORAGE_IDE &&
++ (dev->class & 0x05) == 0)
++ return 0;
++ }
+ /*
+ * No IRQ known to the ACPI subsystem - maybe the BIOS /
+ * driver reported one, then use it. Exit in any case.
--- /dev/null
+From stable-bounces@linux.kernel.org Wed Dec 5 20:42:26 2007
+From: Bob Moore <robert.moore@intel.com>
+Date: Wed, 5 Dec 2007 23:42:10 -0500
+Subject: ACPICA: fix acpi-cpufreq boot crash due to _PSD return-by-reference
+To: stable@kernel.org
+Cc: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, Adrian Bunk <bunk@stusta.de>
+Message-ID: <200712052342.10986.lenb@kernel.org>
+Content-Disposition: inline
+
+
+From: Bob Moore <robert.moore@intel.com>
+
+patch 152c300d007c70c4a1847dad39ecdaba22e7d457 in mainline.
+
+Changed resolution of named references in packages
+
+Fixed a problem with the Package operator where all named
+references were created as object references and left otherwise
+unresolved. According to the ACPI specification, a Package can
+only contain Data Objects or references to control methods. The
+implication is that named references to Data Objects (Integer,
+Buffer, String, Package, BufferField, Field) should be resolved
+immediately upon package creation. This is the approach taken
+with this change. References to all other named objects (Methods,
+Devices, Scopes, etc.) are all now properly created as reference objects.
+
+http://bugzilla.kernel.org/show_bug.cgi?id=5328
+http://bugzilla.kernel.org/show_bug.cgi?id=9429
+
+Signed-off-by: Bob Moore <robert.moore@intel.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/dispatcher/dsobject.c | 91 ++++++++++++++++++++++++++++++++++---
+ 1 file changed, 85 insertions(+), 6 deletions(-)
+
+--- a/drivers/acpi/dispatcher/dsobject.c
++++ b/drivers/acpi/dispatcher/dsobject.c
+@@ -137,6 +137,71 @@ acpi_ds_build_internal_object(struct acp
+ return_ACPI_STATUS(status);
+ }
+ }
++
++ /* Special object resolution for elements of a package */
++
++ if ((op->common.parent->common.aml_opcode == AML_PACKAGE_OP) ||
++ (op->common.parent->common.aml_opcode ==
++ AML_VAR_PACKAGE_OP)) {
++ /*
++ * Attempt to resolve the node to a value before we insert it into
++ * the package. If this is a reference to a common data type,
++ * resolve it immediately. According to the ACPI spec, package
++ * elements can only be "data objects" or method references.
++ * Attempt to resolve to an Integer, Buffer, String or Package.
++ * If cannot, return the named reference (for things like Devices,
++ * Methods, etc.) Buffer Fields and Fields will resolve to simple
++ * objects (int/buf/str/pkg).
++ *
++ * NOTE: References to things like Devices, Methods, Mutexes, etc.
++ * will remain as named references. This behavior is not described
++ * in the ACPI spec, but it appears to be an oversight.
++ */
++ obj_desc = (union acpi_operand_object *)op->common.node;
++
++ status =
++ acpi_ex_resolve_node_to_value(ACPI_CAST_INDIRECT_PTR
++ (struct
++ acpi_namespace_node,
++ &obj_desc),
++ walk_state);
++ if (ACPI_FAILURE(status)) {
++ return_ACPI_STATUS(status);
++ }
++
++ switch (op->common.node->type) {
++ /*
++ * For these types, we need the actual node, not the subobject.
++ * However, the subobject got an extra reference count above.
++ */
++ case ACPI_TYPE_MUTEX:
++ case ACPI_TYPE_METHOD:
++ case ACPI_TYPE_POWER:
++ case ACPI_TYPE_PROCESSOR:
++ case ACPI_TYPE_EVENT:
++ case ACPI_TYPE_REGION:
++ case ACPI_TYPE_DEVICE:
++ case ACPI_TYPE_THERMAL:
++
++ obj_desc =
++ (union acpi_operand_object *)op->common.
++ node;
++ break;
++
++ default:
++ break;
++ }
++
++ /*
++ * If above resolved to an operand object, we are done. Otherwise,
++ * we have a NS node, we must create the package entry as a named
++ * reference.
++ */
++ if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) !=
++ ACPI_DESC_TYPE_NAMED) {
++ goto exit;
++ }
++ }
+ }
+
+ /* Create and init a new internal ACPI object */
+@@ -156,6 +221,7 @@ acpi_ds_build_internal_object(struct acp
+ return_ACPI_STATUS(status);
+ }
+
++ exit:
+ *obj_desc_ptr = obj_desc;
+ return_ACPI_STATUS(AE_OK);
+ }
+@@ -356,12 +422,25 @@ acpi_ds_build_internal_package_obj(struc
+ arg = arg->common.next;
+ for (i = 0; arg && (i < element_count); i++) {
+ if (arg->common.aml_opcode == AML_INT_RETURN_VALUE_OP) {
+-
+- /* This package element is already built, just get it */
+-
+- obj_desc->package.elements[i] =
+- ACPI_CAST_PTR(union acpi_operand_object,
+- arg->common.node);
++ if (arg->common.node->type == ACPI_TYPE_METHOD) {
++ /*
++ * A method reference "looks" to the parser to be a method
++ * invocation, so we special case it here
++ */
++ arg->common.aml_opcode = AML_INT_NAMEPATH_OP;
++ status =
++ acpi_ds_build_internal_object(walk_state,
++ arg,
++ &obj_desc->
++ package.
++ elements[i]);
++ } else {
++ /* This package element is already built, just get it */
++
++ obj_desc->package.elements[i] =
++ ACPI_CAST_PTR(union acpi_operand_object,
++ arg->common.node);
++ }
+ } else {
+ status = acpi_ds_build_internal_object(walk_state, arg,
+ &obj_desc->
--- /dev/null
+From stable-bounces@linux.kernel.org Sun Jan 13 23:23:42 2008
+From: Bob Moore <robert.moore@intel.com>
+Date: Mon, 14 Jan 2008 02:23:24 -0500
+Subject: ACPICA: fix acpi_serialize hang regression
+To: stable@kernel.org
+Message-ID: <200801140223.24262.lenb@kernel.org>
+Content-Disposition: inline
+
+From: Bob Moore <robert.moore@intel.com>
+
+patch 014d433f35d7f34b55dcc7b57c7635aaefc3757f in mainline.
+
+http://bugzilla.kernel.org/show_bug.cgi?id=8171
+
+Signed-off-by: Bob Moore <robert.moore@intel.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/events/evregion.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/acpi/events/evregion.c
++++ b/drivers/acpi/events/evregion.c
+@@ -344,7 +344,7 @@ acpi_ev_address_space_dispatch(union acp
+ * setup will potentially execute control methods
+ * (e.g., _REG method for this region)
+ */
+- acpi_ex_relinquish_interpreter();
++ acpi_ex_exit_interpreter();
+
+ status = region_setup(region_obj, ACPI_REGION_ACTIVATE,
+ handler_desc->address_space.context,
+@@ -352,7 +352,7 @@ acpi_ev_address_space_dispatch(union acp
+
+ /* Re-enter the interpreter */
+
+- acpi_ex_reacquire_interpreter();
++ acpi_ex_enter_interpreter();
+
+ /* Check for failure of the Region Setup */
+
+@@ -405,7 +405,7 @@ acpi_ev_address_space_dispatch(union acp
+ * exit the interpreter because the handler *might* block -- we don't
+ * know what it will do, so we can't hold the lock on the intepreter.
+ */
+- acpi_ex_relinquish_interpreter();
++ acpi_ex_exit_interpreter();
+ }
+
+ /* Call the handler */
+@@ -426,7 +426,7 @@ acpi_ev_address_space_dispatch(union acp
+ * We just returned from a non-default handler, we must re-enter the
+ * interpreter
+ */
+- acpi_ex_reacquire_interpreter();
++ acpi_ex_enter_interpreter();
+ }
+
+ return_ACPI_STATUS(status);
--- /dev/null
+From stable-bounces@linux.kernel.org Thu Jan 10 21:03:18 2008
+From: Herbert Xu <herbert@gondor.apana.org.au>
+Date: Fri, 11 Jan 2008 16:02:52 +1100
+Subject: CRYPTO: padlock: Fix spurious ECB page fault
+To: stable@kernel.org
+Message-ID: <20080111050252.GA24339@gondor.apana.org.au>
+Content-Disposition: inline
+
+
+[CRYPTO] padlock: Fix spurious ECB page fault
+
+[ Upstream commit: d4a7dd8e637b322faaa934ffcd6dd07711af831f ]
+[ Upstream commit: 490fe3f05be3f7c87d7932bcb6e6e53e3db2cd9c ]
+
+The xcryptecb instruction always processes an even number of blocks so
+we need to ensure th existence of an extra block if we have to process
+an odd number of blocks.
+
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/crypto/padlock-aes.c | 53 +++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 49 insertions(+), 4 deletions(-)
+
+--- a/drivers/crypto/padlock-aes.c
++++ b/drivers/crypto/padlock-aes.c
+@@ -419,13 +419,58 @@ static int aes_set_key(struct crypto_tfm
+ /* ====== Encryption/decryption routines ====== */
+
+ /* These are the real call to PadLock. */
++static inline void padlock_xcrypt(const u8 *input, u8 *output, void *key,
++ void *control_word)
++{
++ asm volatile (".byte 0xf3,0x0f,0xa7,0xc8" /* rep xcryptecb */
++ : "+S"(input), "+D"(output)
++ : "d"(control_word), "b"(key), "c"(1));
++}
++
++static void aes_crypt_copy(const u8 *in, u8 *out, u32 *key, struct cword *cword)
++{
++ u8 buf[AES_BLOCK_SIZE * 2 + PADLOCK_ALIGNMENT - 1];
++ u8 *tmp = PTR_ALIGN(&buf[0], PADLOCK_ALIGNMENT);
++
++ memcpy(tmp, in, AES_BLOCK_SIZE);
++ padlock_xcrypt(tmp, out, key, cword);
++}
++
++static inline void aes_crypt(const u8 *in, u8 *out, u32 *key,
++ struct cword *cword)
++{
++ asm volatile ("pushfl; popfl");
++
++ /* padlock_xcrypt requires at least two blocks of data. */
++ if (unlikely(!(((unsigned long)in ^ (PAGE_SIZE - AES_BLOCK_SIZE)) &
++ (PAGE_SIZE - 1)))) {
++ aes_crypt_copy(in, out, key, cword);
++ return;
++ }
++
++ padlock_xcrypt(in, out, key, cword);
++}
++
+ static inline void padlock_xcrypt_ecb(const u8 *input, u8 *output, void *key,
+ void *control_word, u32 count)
+ {
++ if (count == 1) {
++ aes_crypt(input, output, key, control_word);
++ return;
++ }
++
+ asm volatile ("pushfl; popfl"); /* enforce key reload. */
+- asm volatile (".byte 0xf3,0x0f,0xa7,0xc8" /* rep xcryptecb */
++ asm volatile ("test $1, %%cl;"
++ "je 1f;"
++ "lea -1(%%ecx), %%eax;"
++ "mov $1, %%ecx;"
++ ".byte 0xf3,0x0f,0xa7,0xc8;" /* rep xcryptecb */
++ "mov %%eax, %%ecx;"
++ "1:"
++ ".byte 0xf3,0x0f,0xa7,0xc8" /* rep xcryptecb */
+ : "+S"(input), "+D"(output)
+- : "d"(control_word), "b"(key), "c"(count));
++ : "d"(control_word), "b"(key), "c"(count)
++ : "ax");
+ }
+
+ static inline u8 *padlock_xcrypt_cbc(const u8 *input, u8 *output, void *key,
+@@ -443,13 +488,13 @@ static inline u8 *padlock_xcrypt_cbc(con
+ static void aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
+ {
+ struct aes_ctx *ctx = aes_ctx(tfm);
+- padlock_xcrypt_ecb(in, out, ctx->E, &ctx->cword.encrypt, 1);
++ aes_crypt(in, out, ctx->E, &ctx->cword.encrypt);
+ }
+
+ static void aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
+ {
+ struct aes_ctx *ctx = aes_ctx(tfm);
+- padlock_xcrypt_ecb(in, out, ctx->D, &ctx->cword.decrypt, 1);
++ aes_crypt(in, out, ctx->D, &ctx->cword.decrypt);
+ }
+
+ static struct crypto_alg aes_alg = {
--- /dev/null
+From stable-bounces@linux.kernel.org Sun Jan 13 23:39:46 2008
+From: Len Brown <lenb@kernel.org>
+Date: Mon, 14 Jan 2008 02:39:18 -0500
+Subject: PM: ACPI and APM must not be enabled at the same time
+To: stable@kernel.org
+Message-ID: <200801140239.18794.lenb@kernel.org>
+Content-Disposition: inline
+
+From: Len Brown <len.brown@intel.com>
+
+patch 9f9adecd2d0e4f88fa0e8cb06c6ec207748df70a in mainline.
+
+ACPI and APM used "pm_active" to guarantee that
+they would not be simultaneously active.
+
+But pm_active was recently moved under CONFIG_PM_LEGACY,
+so that without CONFIG_PM_LEGACY, pm_active became a NOP --
+allowing ACPI and APM to both be simultaneously enabled.
+This caused unpredictable results, including boot hangs.
+
+Further, the code under CONFIG_PM_LEGACY is scheduled
+for removal.
+
+So replace pm_active with pm_flags.
+pm_flags depends only on CONFIG_PM,
+which is present for both CONFIG_APM and CONFIG_ACPI.
+
+http://bugzilla.kernel.org/show_bug.cgi?id=9194
+
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/i386/kernel/apm.c | 10 +++-------
+ drivers/acpi/bus.c | 7 ++-----
+ include/linux/pm.h | 9 +++++++++
+ include/linux/pm_legacy.h | 6 ------
+ kernel/power/main.c | 3 +++
+ kernel/power/pm.c | 4 ----
+ 6 files changed, 17 insertions(+), 22 deletions(-)
+
+--- a/arch/i386/kernel/apm.c
++++ b/arch/i386/kernel/apm.c
+@@ -2256,14 +2256,12 @@ static int __init apm_init(void)
+ apm_info.disabled = 1;
+ return -ENODEV;
+ }
+- if (PM_IS_ACTIVE()) {
++ if (pm_flags & PM_ACPI) {
+ printk(KERN_NOTICE "apm: overridden by ACPI.\n");
+ apm_info.disabled = 1;
+ return -ENODEV;
+ }
+-#ifdef CONFIG_PM_LEGACY
+- pm_active = 1;
+-#endif
++ pm_flags |= PM_APM;
+
+ /*
+ * Set up a segment that references the real mode segment 0x40
+@@ -2366,9 +2364,7 @@ static void __exit apm_exit(void)
+ kthread_stop(kapmd_task);
+ kapmd_task = NULL;
+ }
+-#ifdef CONFIG_PM_LEGACY
+- pm_active = 0;
+-#endif
++ pm_flags &= ~PM_APM;
+ }
+
+ module_init(apm_init);
+--- a/drivers/acpi/bus.c
++++ b/drivers/acpi/bus.c
+@@ -29,7 +29,6 @@
+ #include <linux/list.h>
+ #include <linux/sched.h>
+ #include <linux/pm.h>
+-#include <linux/pm_legacy.h>
+ #include <linux/device.h>
+ #include <linux/proc_fs.h>
+ #ifdef CONFIG_X86
+@@ -757,16 +756,14 @@ static int __init acpi_init(void)
+ result = acpi_bus_init();
+
+ if (!result) {
+-#ifdef CONFIG_PM_LEGACY
+- if (!PM_IS_ACTIVE())
+- pm_active = 1;
++ if (!(pm_flags & PM_APM))
++ pm_flags |= PM_ACPI;
+ else {
+ printk(KERN_INFO PREFIX
+ "APM is already active, exiting\n");
+ disable_acpi();
+ result = -ENODEV;
+ }
+-#endif
+ } else
+ disable_acpi();
+
+--- a/include/linux/pm.h
++++ b/include/linux/pm.h
+@@ -344,6 +344,15 @@ static inline int call_platform_enable_w
+ device_set_wakeup_enable(dev,val); \
+ } while(0)
+
++/*
++ * Global Power Management flags
++ * Used to keep APM and ACPI from both being active
++ */
++extern unsigned int pm_flags;
++
++#define PM_APM 1
++#define PM_ACPI 2
++
+ #endif /* __KERNEL__ */
+
+ #endif /* _LINUX_PM_H */
+--- a/include/linux/pm_legacy.h
++++ b/include/linux/pm_legacy.h
+@@ -4,10 +4,6 @@
+
+ #ifdef CONFIG_PM_LEGACY
+
+-extern int pm_active;
+-
+-#define PM_IS_ACTIVE() (pm_active != 0)
+-
+ /*
+ * Register a device with power management
+ */
+@@ -21,8 +17,6 @@ int __deprecated pm_send_all(pm_request_
+
+ #else /* CONFIG_PM_LEGACY */
+
+-#define PM_IS_ACTIVE() 0
+-
+ static inline struct pm_dev *pm_register(pm_dev_t type,
+ unsigned long id,
+ pm_callback callback)
+--- a/kernel/power/main.c
++++ b/kernel/power/main.c
+@@ -27,6 +27,9 @@ BLOCKING_NOTIFIER_HEAD(pm_chain_head);
+
+ DEFINE_MUTEX(pm_mutex);
+
++unsigned int pm_flags;
++EXPORT_SYMBOL(pm_flags);
++
+ #ifdef CONFIG_SUSPEND
+
+ /* This is just an arbitrary number */
+--- a/kernel/power/pm.c
++++ b/kernel/power/pm.c
+@@ -27,8 +27,6 @@
+ #include <linux/interrupt.h>
+ #include <linux/mutex.h>
+
+-int pm_active;
+-
+ /*
+ * Locking notes:
+ * pm_devs_lock can be a semaphore providing pm ops are not called
+@@ -204,6 +202,4 @@ int pm_send_all(pm_request_t rqst, void
+
+ EXPORT_SYMBOL(pm_register);
+ EXPORT_SYMBOL(pm_send_all);
+-EXPORT_SYMBOL(pm_active);
+-
+
cassini_1.patch
cassini_2.patch
cassini_3.patch
+sparc64-fix-oops-in-dma_sync_-_for_device.patch
+sparc64-implement-pci_resource_to_user.patch
+acpica-fix-acpi-cpufreq-boot-crash-due-to-_psd-return-by-reference.patch
+acpi-not-register-gsi-for-pci-ide-controller-in-legacy-mode.patch
+acpica-fix-acpi_serialize-hang-regression.patch
+acpi-apply-quirk_ich6_lpc_acpi-to-more-ich8-and-ich9.patch
+pm-acpi-and-apm-must-not-be-enabled-at-the-same-time.patch
+crypto-padlock-fix-spurious-ecb-page-fault.patch
--- /dev/null
+From stable-bounces@linux.kernel.org Fri Jan 11 01:27:54 2008
+From: David Miller <davem@davemloft.net>
+Date: Fri, 11 Jan 2008 01:27:23 -0800 (PST)
+Subject: SPARC64: Fix OOPS in dma_sync_*_for_device()
+To: stable@kernel.org
+Cc: bunk@kernel.org
+Message-ID: <20080111.012723.19124338.davem@davemloft.net>
+
+From: David Miller <davem@davemloft.net>
+
+[SPARC64]: Fix OOPS in dma_sync_*_for_device()
+
+[ Upstream commit: 36bb61346d9e64b55285f27363e93a6e96f2abba ]
+
+I included these operations vector cases for situations
+where we never need to do anything, the entries aren't
+filled in by any implementation, so we OOPS trying to
+invoke NULL pointer functions.
+
+Really make them NOPs, to fix the bug.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/asm-sparc64/dma-mapping.h | 12 +++---------
+ 1 file changed, 3 insertions(+), 9 deletions(-)
+
+--- a/include/asm-sparc64/dma-mapping.h
++++ b/include/asm-sparc64/dma-mapping.h
+@@ -25,15 +25,9 @@ struct dma_ops {
+ void (*sync_single_for_cpu)(struct device *dev,
+ dma_addr_t dma_handle, size_t size,
+ enum dma_data_direction direction);
+- void (*sync_single_for_device)(struct device *dev,
+- dma_addr_t dma_handle, size_t size,
+- enum dma_data_direction direction);
+ void (*sync_sg_for_cpu)(struct device *dev, struct scatterlist *sg,
+ int nelems,
+ enum dma_data_direction direction);
+- void (*sync_sg_for_device)(struct device *dev, struct scatterlist *sg,
+- int nelems,
+- enum dma_data_direction direction);
+ };
+ extern const struct dma_ops *dma_ops;
+
+@@ -105,7 +99,7 @@ static inline void dma_sync_single_for_d
+ size_t size,
+ enum dma_data_direction direction)
+ {
+- dma_ops->sync_single_for_device(dev, dma_handle, size, direction);
++ /* No flushing needed to sync cpu writes to the device. */
+ }
+
+ static inline void dma_sync_single_range_for_cpu(struct device *dev,
+@@ -123,7 +117,7 @@ static inline void dma_sync_single_range
+ size_t size,
+ enum dma_data_direction direction)
+ {
+- dma_sync_single_for_device(dev, dma_handle+offset, size, direction);
++ /* No flushing needed to sync cpu writes to the device. */
+ }
+
+
+@@ -138,7 +132,7 @@ static inline void dma_sync_sg_for_devic
+ struct scatterlist *sg, int nelems,
+ enum dma_data_direction direction)
+ {
+- dma_ops->sync_sg_for_device(dev, sg, nelems, direction);
++ /* No flushing needed to sync cpu writes to the device. */
+ }
+
+ static inline int dma_mapping_error(dma_addr_t dma_addr)
--- /dev/null
+From stable-bounces@linux.kernel.org Fri Jan 11 01:29:10 2008
+From: David Miller <davem@davemloft.net>
+Date: Fri, 11 Jan 2008 01:28:43 -0800 (PST)
+Subject: SPARC64: Implement pci_resource_to_user()
+To: stable@kernel.org
+Cc: bunk@kernel.org
+Message-ID: <20080111.012843.46202796.davem@davemloft.net>
+
+From: David Miller <davem@davemloft.net>
+
+[SPARC64]: Implement pci_resource_to_user()
+
+[ Upstream commit: bcea1db16ba1c45ccebb3bfb8441642d1342c4d5 ]
+
+This makes libpciaccess able to mmap() resources of the
+device properly.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/sparc64/kernel/pci.c | 16 ++++++++++++++++
+ include/asm-sparc64/pci.h | 4 ++++
+ 2 files changed, 20 insertions(+)
+
+--- a/arch/sparc64/kernel/pci.c
++++ b/arch/sparc64/kernel/pci.c
+@@ -1276,4 +1276,20 @@ int pci_dma_supported(struct pci_dev *pd
+ return (device_mask & dma_addr_mask) == dma_addr_mask;
+ }
+
++void pci_resource_to_user(const struct pci_dev *pdev, int bar,
++ const struct resource *rp, resource_size_t *start,
++ resource_size_t *end)
++{
++ struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller;
++ unsigned long offset;
++
++ if (rp->flags & IORESOURCE_IO)
++ offset = pbm->io_space.start;
++ else
++ offset = pbm->mem_space.start;
++
++ *start = rp->start - offset;
++ *end = rp->end - offset;
++}
++
+ #endif /* !(CONFIG_PCI) */
+--- a/include/asm-sparc64/pci.h
++++ b/include/asm-sparc64/pci.h
+@@ -200,6 +200,10 @@ static inline int pci_get_legacy_ide_irq
+ struct device_node;
+ extern struct device_node *pci_device_to_OF_node(struct pci_dev *pdev);
+
++#define HAVE_ARCH_PCI_RESOURCE_TO_USER
++extern void pci_resource_to_user(const struct pci_dev *dev, int bar,
++ const struct resource *rsrc,
++ resource_size_t *start, resource_size_t *end);
+ #endif /* __KERNEL__ */
+
+ #endif /* __SPARC64_PCI_H */