From: Chris Wright Date: Thu, 5 Jan 2006 02:17:18 +0000 (-0800) Subject: Updated asus acpi fix from Karol (in acpi-test) added to .14 and .15. X-Git-Tag: v2.6.14.6~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=aad319801ee28b1476ee706619beb64d4744cc65;p=thirdparty%2Fkernel%2Fstable-queue.git Updated asus acpi fix from Karol (in acpi-test) added to .14 and .15. --- 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 index 00000000000..71ee98d422f --- /dev/null +++ b/queue-2.6.14/acpi-fix-asus_acpi-on-samsung-p30-p35.patch @@ -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 +To: "Brown, Len" , 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 +Signed-off-by: Chris Wright +--- + + 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; diff --git a/queue-2.6.14/series b/queue-2.6.14/series index 37f87815763..fa2896859d2 100644 --- a/queue-2.6.14/series +++ b/queue-2.6.14/series @@ -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 index 00000000000..e153223b2f8 --- /dev/null +++ b/queue/acpi-fix-asus_acpi-on-samsung-p30-p35.patch @@ -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 +To: "Brown, Len" , 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 +Signed-off-by: Chris Wright +--- + + 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; diff --git a/queue/series b/queue/series index 67c3aa18ac4..c549f093369 100644 --- a/queue/series +++ b/queue/series @@ -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