]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Updated asus acpi fix from Karol (in acpi-test) added to .14 and .15.
authorChris Wright <chrisw@sous-sol.org>
Thu, 5 Jan 2006 02:17:18 +0000 (18:17 -0800)
committerChris Wright <chrisw@sous-sol.org>
Thu, 5 Jan 2006 02:17:18 +0000 (18:17 -0800)
queue-2.6.14/acpi-fix-asus_acpi-on-samsung-p30-p35.patch [new file with mode: 0644]
queue-2.6.14/series
queue/acpi-fix-asus_acpi-on-samsung-p30-p35.patch [new file with mode: 0644]
queue/series

diff --git a/queue-2.6.14/acpi-fix-asus_acpi-on-samsung-p30-p35.patch b/queue-2.6.14/acpi-fix-asus_acpi-on-samsung-p30-p35.patch
new file mode 100644 (file)
index 0000000..71ee98d
--- /dev/null
@@ -0,0 +1,72 @@
+From stable-bounces@linux.kernel.org  Tue Jan  3 19:59:37 2006
+Date: Wed, 4 Jan 2006 04:55:09 +0100
+From: Karol Kozimor <sziwan@hell.org.pl>
+To: "Brown, Len" <len.brown@intel.com>, stable@kernel.org
+Message-ID: <20060104035509.GA4983@hell.org.pl>
+Cc: linux-acpi@vger.kernel.org, Greek0@gmx.net
+Subject: [PATCH] acpi: fix asus_acpi on Samsung P30/P35
+
+Work around asus_acpi driver oopses on Samsung P30s and the like due to the
+ACPI implicit return.
+
+The code used to rely on a certain method to return a NULL buffer, which
+is now hardly possible with the implicit return code on by default. This
+sort of fixes bugs #5067 and #5092 for now.
+
+Note: this patch makes the driver unusable on said machines (and on said
+machines only) iff acpi=strict is specified, but it seems noone really uses
+that.
+
+Signed-off-by: Karol Kozimor <sziwan@hell.org.pl>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+
+ drivers/acpi/asus_acpi.c |   27 ++++++++++++++++++---------
+ 1 file changed, 18 insertions(+), 9 deletions(-)
+
+Index: linux-2.6.14.5/drivers/acpi/asus_acpi.c
+===================================================================
+--- linux-2.6.14.5.orig/drivers/acpi/asus_acpi.c
++++ linux-2.6.14.5/drivers/acpi/asus_acpi.c
+@@ -987,9 +987,21 @@ static int __init asus_hotk_get_info(voi
+               printk(KERN_NOTICE "  BSTS called, 0x%02x returned\n",
+                      bsts_result);
+-      /* Samsung P30 has a device with a valid _HID whose INIT does not 
+-       * return anything. Catch this one and any similar here */
+-      if (buffer.pointer == NULL) {
++      /* This is unlikely with implicit return */
++      if (buffer.pointer == NULL)
++              return -EINVAL;
++
++      model = (union acpi_object *) buffer.pointer;
++      /*
++       * Samsung P30 has a device with a valid _HID whose INIT does not 
++       * return anything. It used to be possible to catch this exception,
++       * but the implicit return code will now happily confuse the 
++       * driver. We assume that every ACPI_TYPE_STRING is a valid model
++       * identifier but it's still possible to get completely bogus data.
++       */
++      if (model->type == ACPI_TYPE_STRING) {
++              printk(KERN_NOTICE "  %s model detected, ", model->string.pointer);
++      } else {
+               if (asus_info &&        /* Samsung P30 */
+                   strncmp(asus_info->oem_table_id, "ODEM", 4) == 0) {
+                       hotk->model = P30;
+@@ -1002,13 +1014,10 @@ static int __init asus_hotk_get_info(voi
+                              "the developers with your DSDT\n");
+               }
+               hotk->methods = &model_conf[hotk->model];
+-              return AE_OK;
+-      }
++              
++              acpi_os_free(model);
+-      model = (union acpi_object *)buffer.pointer;
+-      if (model->type == ACPI_TYPE_STRING) {
+-              printk(KERN_NOTICE "  %s model detected, ",
+-                     model->string.pointer);
++              return AE_OK;
+       }
+       hotk->model = END_MODEL;
index 37f87815763f45df5b14e25471210851d188b8db..fa2896859d2a8301139facd4aded1906de304495 100644 (file)
@@ -3,3 +3,4 @@ ieee80211_crypt_tkip-depends-on-net_radio.patch
 insanity-avoidance-in-proc.patch
 sysctl-don-t-overflow-the-user-supplied-buffer-with-0.patch
 ufs-inode-i_sem-is-not-released-in-error-path.patch
+acpi-fix-asus_acpi-on-samsung-p30-p35.patch
diff --git a/queue/acpi-fix-asus_acpi-on-samsung-p30-p35.patch b/queue/acpi-fix-asus_acpi-on-samsung-p30-p35.patch
new file mode 100644 (file)
index 0000000..e153223
--- /dev/null
@@ -0,0 +1,72 @@
+From stable-bounces@linux.kernel.org  Tue Jan  3 19:59:37 2006
+Date: Wed, 4 Jan 2006 04:55:09 +0100
+From: Karol Kozimor <sziwan@hell.org.pl>
+To: "Brown, Len" <len.brown@intel.com>, stable@kernel.org
+Message-ID: <20060104035509.GA4983@hell.org.pl>
+Cc: linux-acpi@vger.kernel.org, Greek0@gmx.net
+Subject: [PATCH] acpi: fix asus_acpi on Samsung P30/P35
+
+Work around asus_acpi driver oopses on Samsung P30s and the like due to the
+ACPI implicit return.
+
+The code used to rely on a certain method to return a NULL buffer, which
+is now hardly possible with the implicit return code on by default. This
+sort of fixes bugs #5067 and #5092 for now.
+
+Note: this patch makes the driver unusable on said machines (and on said
+machines only) iff acpi=strict is specified, but it seems noone really uses
+that.
+
+Signed-off-by: Karol Kozimor <sziwan@hell.org.pl>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+
+ drivers/acpi/asus_acpi.c |   27 ++++++++++++++++++---------
+ 1 files changed, 18 insertions(+), 9 deletions(-)
+
+Index: linux-2.6.15.y/drivers/acpi/asus_acpi.c
+===================================================================
+--- linux-2.6.15.y.orig/drivers/acpi/asus_acpi.c
++++ linux-2.6.15.y/drivers/acpi/asus_acpi.c
+@@ -987,9 +987,21 @@ static int __init asus_hotk_get_info(voi
+               printk(KERN_NOTICE "  BSTS called, 0x%02x returned\n",
+                      bsts_result);
+-      /* Samsung P30 has a device with a valid _HID whose INIT does not 
+-       * return anything. Catch this one and any similar here */
+-      if (buffer.pointer == NULL) {
++      /* This is unlikely with implicit return */
++      if (buffer.pointer == NULL)
++              return -EINVAL;
++
++      model = (union acpi_object *) buffer.pointer;
++      /*
++       * Samsung P30 has a device with a valid _HID whose INIT does not 
++       * return anything. It used to be possible to catch this exception,
++       * but the implicit return code will now happily confuse the 
++       * driver. We assume that every ACPI_TYPE_STRING is a valid model
++       * identifier but it's still possible to get completely bogus data.
++       */
++      if (model->type == ACPI_TYPE_STRING) {
++              printk(KERN_NOTICE "  %s model detected, ", model->string.pointer);
++      } else {
+               if (asus_info &&        /* Samsung P30 */
+                   strncmp(asus_info->oem_table_id, "ODEM", 4) == 0) {
+                       hotk->model = P30;
+@@ -1002,13 +1014,10 @@ static int __init asus_hotk_get_info(voi
+                              "the developers with your DSDT\n");
+               }
+               hotk->methods = &model_conf[hotk->model];
+-              return AE_OK;
+-      }
++              
++              acpi_os_free(model);
+-      model = (union acpi_object *)buffer.pointer;
+-      if (model->type == ACPI_TYPE_STRING) {
+-              printk(KERN_NOTICE "  %s model detected, ",
+-                     model->string.pointer);
++              return AE_OK;
+       }
+       hotk->model = END_MODEL;
index 67c3aa18ac45e7313adf75b710f9768e4ab40ffc..c549f09336947de4c76aa9909ac3e81347e32779 100644 (file)
@@ -1,2 +1,3 @@
 bridge-fix-faulty-check-in-br_stp_recalculate_bridge_id.patch
 ufs-inode-i_sem-is-not-released-in-error-path.patch
+acpi-fix-asus_acpi-on-samsung-p30-p35.patch