From a5416820429dfd41faf2fb4f9ba6a12efcaf9e85 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 15 Jan 2008 11:30:46 -0800 Subject: [PATCH] more .23 patches --- ..._ich6_lpc_acpi-to-more-ich8-and-ich9.patch | 50 +++++ ...or-pci-ide-controller-in-legacy-mode.patch | 48 +++++ ...rash-due-to-_psd-return-by-reference.patch | 151 ++++++++++++++++ ...a-fix-acpi_serialize-hang-regression.patch | 60 ++++++ ...-padlock-fix-spurious-ecb-page-fault.patch | 104 +++++++++++ ...must-not-be-enabled-at-the-same-time.patch | 171 ++++++++++++++++++ queue-2.6.23/series | 8 + ...64-fix-oops-in-dma_sync_-_for_device.patch | 73 ++++++++ ...arc64-implement-pci_resource_to_user.patch | 61 +++++++ 9 files changed, 726 insertions(+) create mode 100644 queue-2.6.23/acpi-apply-quirk_ich6_lpc_acpi-to-more-ich8-and-ich9.patch create mode 100644 queue-2.6.23/acpi-not-register-gsi-for-pci-ide-controller-in-legacy-mode.patch create mode 100644 queue-2.6.23/acpica-fix-acpi-cpufreq-boot-crash-due-to-_psd-return-by-reference.patch create mode 100644 queue-2.6.23/acpica-fix-acpi_serialize-hang-regression.patch create mode 100644 queue-2.6.23/crypto-padlock-fix-spurious-ecb-page-fault.patch create mode 100644 queue-2.6.23/pm-acpi-and-apm-must-not-be-enabled-at-the-same-time.patch create mode 100644 queue-2.6.23/sparc64-fix-oops-in-dma_sync_-_for_device.patch create mode 100644 queue-2.6.23/sparc64-implement-pci_resource_to_user.patch diff --git a/queue-2.6.23/acpi-apply-quirk_ich6_lpc_acpi-to-more-ich8-and-ich9.patch b/queue-2.6.23/acpi-apply-quirk_ich6_lpc_acpi-to-more-ich8-and-ich9.patch new file mode 100644 index 00000000000..2c90c18942e --- /dev/null +++ b/queue-2.6.23/acpi-apply-quirk_ich6_lpc_acpi-to-more-ich8-and-ich9.patch @@ -0,0 +1,50 @@ +From stable-bounces@linux.kernel.org Sun Jan 13 23:28:07 2008 +From: Zhao Yakui +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 + +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 +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + 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 diff --git a/queue-2.6.23/acpi-not-register-gsi-for-pci-ide-controller-in-legacy-mode.patch b/queue-2.6.23/acpi-not-register-gsi-for-pci-ide-controller-in-legacy-mode.patch new file mode 100644 index 00000000000..6716701959f --- /dev/null +++ b/queue-2.6.23/acpi-not-register-gsi-for-pci-ide-controller-in-legacy-mode.patch @@ -0,0 +1,48 @@ +From stable-bounces@linux.kernel.org Sun Jan 13 23:22:37 2008 +From: Alan Cox +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 + +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 +Signed-off-by: Zhao Yakui +Signed-off-by: Zhang Rui +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + 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. diff --git a/queue-2.6.23/acpica-fix-acpi-cpufreq-boot-crash-due-to-_psd-return-by-reference.patch b/queue-2.6.23/acpica-fix-acpi-cpufreq-boot-crash-due-to-_psd-return-by-reference.patch new file mode 100644 index 00000000000..b8cf453e276 --- /dev/null +++ b/queue-2.6.23/acpica-fix-acpi-cpufreq-boot-crash-due-to-_psd-return-by-reference.patch @@ -0,0 +1,151 @@ +From stable-bounces@linux.kernel.org Wed Dec 5 20:42:26 2007 +From: Bob Moore +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 +Message-ID: <200712052342.10986.lenb@kernel.org> +Content-Disposition: inline + + +From: Bob Moore + +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 +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + 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-> diff --git a/queue-2.6.23/acpica-fix-acpi_serialize-hang-regression.patch b/queue-2.6.23/acpica-fix-acpi_serialize-hang-regression.patch new file mode 100644 index 00000000000..fdcae9853d8 --- /dev/null +++ b/queue-2.6.23/acpica-fix-acpi_serialize-hang-regression.patch @@ -0,0 +1,60 @@ +From stable-bounces@linux.kernel.org Sun Jan 13 23:23:42 2008 +From: Bob Moore +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 + +patch 014d433f35d7f34b55dcc7b57c7635aaefc3757f in mainline. + +http://bugzilla.kernel.org/show_bug.cgi?id=8171 + +Signed-off-by: Bob Moore +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + 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); diff --git a/queue-2.6.23/crypto-padlock-fix-spurious-ecb-page-fault.patch b/queue-2.6.23/crypto-padlock-fix-spurious-ecb-page-fault.patch new file mode 100644 index 00000000000..09f1a0cb78c --- /dev/null +++ b/queue-2.6.23/crypto-padlock-fix-spurious-ecb-page-fault.patch @@ -0,0 +1,104 @@ +From stable-bounces@linux.kernel.org Thu Jan 10 21:03:18 2008 +From: Herbert Xu +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 = { diff --git a/queue-2.6.23/pm-acpi-and-apm-must-not-be-enabled-at-the-same-time.patch b/queue-2.6.23/pm-acpi-and-apm-must-not-be-enabled-at-the-same-time.patch new file mode 100644 index 00000000000..9e29a4fa6de --- /dev/null +++ b/queue-2.6.23/pm-acpi-and-apm-must-not-be-enabled-at-the-same-time.patch @@ -0,0 +1,171 @@ +From stable-bounces@linux.kernel.org Sun Jan 13 23:39:46 2008 +From: Len Brown +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 + +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 +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + 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 + #include + #include +-#include + #include + #include + #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 + #include + +-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); +- + diff --git a/queue-2.6.23/series b/queue-2.6.23/series index 4d1c3cd2bd0..639b53a7fd3 100644 --- a/queue-2.6.23/series +++ b/queue-2.6.23/series @@ -28,3 +28,11 @@ ipv4-ip_gre-set-mac_header-correctly-in-receive-path.patch 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 diff --git a/queue-2.6.23/sparc64-fix-oops-in-dma_sync_-_for_device.patch b/queue-2.6.23/sparc64-fix-oops-in-dma_sync_-_for_device.patch new file mode 100644 index 00000000000..9d132fa3e75 --- /dev/null +++ b/queue-2.6.23/sparc64-fix-oops-in-dma_sync_-_for_device.patch @@ -0,0 +1,73 @@ +From stable-bounces@linux.kernel.org Fri Jan 11 01:27:54 2008 +From: David Miller +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 + +[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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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) diff --git a/queue-2.6.23/sparc64-implement-pci_resource_to_user.patch b/queue-2.6.23/sparc64-implement-pci_resource_to_user.patch new file mode 100644 index 00000000000..fdff8aafa58 --- /dev/null +++ b/queue-2.6.23/sparc64-implement-pci_resource_to_user.patch @@ -0,0 +1,61 @@ +From stable-bounces@linux.kernel.org Fri Jan 11 01:29:10 2008 +From: David Miller +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 + +[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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 */ -- 2.47.3