]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
more .23 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 15 Jan 2008 19:30:46 +0000 (11:30 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 15 Jan 2008 19:30:46 +0000 (11:30 -0800)
queue-2.6.23/acpi-apply-quirk_ich6_lpc_acpi-to-more-ich8-and-ich9.patch [new file with mode: 0644]
queue-2.6.23/acpi-not-register-gsi-for-pci-ide-controller-in-legacy-mode.patch [new file with mode: 0644]
queue-2.6.23/acpica-fix-acpi-cpufreq-boot-crash-due-to-_psd-return-by-reference.patch [new file with mode: 0644]
queue-2.6.23/acpica-fix-acpi_serialize-hang-regression.patch [new file with mode: 0644]
queue-2.6.23/crypto-padlock-fix-spurious-ecb-page-fault.patch [new file with mode: 0644]
queue-2.6.23/pm-acpi-and-apm-must-not-be-enabled-at-the-same-time.patch [new file with mode: 0644]
queue-2.6.23/series
queue-2.6.23/sparc64-fix-oops-in-dma_sync_-_for_device.patch [new file with mode: 0644]
queue-2.6.23/sparc64-implement-pci_resource_to_user.patch [new file with mode: 0644]

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 (file)
index 0000000..2c90c18
--- /dev/null
@@ -0,0 +1,50 @@
+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
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 (file)
index 0000000..6716701
--- /dev/null
@@ -0,0 +1,48 @@
+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.
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 (file)
index 0000000..b8cf453
--- /dev/null
@@ -0,0 +1,151 @@
+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->
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 (file)
index 0000000..fdcae98
--- /dev/null
@@ -0,0 +1,60 @@
+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);
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 (file)
index 0000000..09f1a0c
--- /dev/null
@@ -0,0 +1,104 @@
+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 = {
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 (file)
index 0000000..9e29a4f
--- /dev/null
@@ -0,0 +1,171 @@
+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);
+-
index 4d1c3cd2bd02b2b5628ae0b35bcddc19e7aceab0..639b53a7fd3489e259193023c716ed68ecbe9c2e 100644 (file)
@@ -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 (file)
index 0000000..9d132fa
--- /dev/null
@@ -0,0 +1,73 @@
+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)
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 (file)
index 0000000..fdff8aa
--- /dev/null
@@ -0,0 +1,61 @@
+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 */