All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexey Starikovskiy <alexey.y.starikovskiy@linux.intel.com>
To: Andrew Morton <akpm@osdl.org>
Cc: Dalibor Straka <dast@panelnet.cz>,
	jikos@jikos.cz, linux-acpi@vger.kernel.org
Subject: Re: Possible bug in ACPI
Date: Sun, 03 Dec 2006 12:06:54 +0300	[thread overview]
Message-ID: <457293AE.2060701@linux.intel.com> (raw)
In-Reply-To: <20061202192632.d1815e5f.akpm@osdl.org>

Andrew,
This is a patch reverted by Linus from rc6-git2 because it broke his 
Compaq n620c, it refers to #5534 bug. Basically, kacpid deadlocks on 
some new HP notebooks, and all incoming requests would be queued until 
memory is over if this patch is not applied. On a bright side -- it's 
not a memory leak...
Patch, which works for Linus laptop and "looks acceptable" to Linus is 
the last in #5534 list.

Regards,
    Alex.

Andrew Morton wrote:
> We appear to have a fatal memory leak in ACPI.  It's a shame this was
> known about in the -rc series but not fixed then.
>
> Dalibor, please raise a full and new report at bugzilla.kernel.org.
>
>   
>> On Sat, 2 Dec 2006 21:51:40 +0100 Dalibor Straka <dast@panelnet.cz> wrote:
>> On Thu, Nov 09, 2006 at 02:04:16PM -0800, Andrew Morton wrote:
>>     
>>> If this bug is still present in 2.6.19-rc5 could you please raise a report
>>> at bugzilla.kernel.org?
>>>
>>> Thanks.
>>>
>>> On Tue, 19 Sep 2006 23:47:24 +0200
>>> Dalibor Straka <dast@panelnet.cz> wrote:
>>>
>>>       
>>>> Hello,
>>>>
>>>> I am often running out of memory. It looks like an ACPI code is guilty:
>>>> dast@lili:~$ grep -i acpi /proc/slabinfo 
>>>> Acpi-Operand        3076   3127     64   59    1 : tunables  120   60 8 : slabdata     53     53      0
>>>> Acpi-ParseExt         16     59     64   59    1 : tunables  120   60 8 : slabdata      1      1      0
>>>> Acpi-Parse            76     92     40   92    1 : tunables  120   60 8 : slabdata      1      1      0
>>>> Acpi-State        1644960 1644960     80   48    1 : tunables  120   60 8 : slabdata  34270  34270      0
>>>> Acpi-Namespace      1177   1232     32  112    1 : tunables  120   60 8 : slabdata     11     11      0
>>>> dast@lili:~$ free
>>>> Mem:        899280     892472       6808          0      82212 77936
>>>> -/+ buffers/cache:     732324     166956
>>>> Swap:      2634620     243052    2404568
>>>> dast@lili:~$ uname -a
>>>> Linux lili 2.6.18-rc7 #1 SMP Sun Sep 17 15:01:00 CEST 2006 x86_64
>>>>
>>>>
>>>> Actualy the Acpi-State's memory is increasing slowly in minutes:
>>>> Acpi-State         16176  16176     80   48    1 : tunables  120   60 8 : slabdata    337    337      0
>>>> Acpi-State         18816  18816     80   48    1 : tunables  120   60 8 : slabdata    392    392      0
>>>> Acpi-State         19200  19200     80   48    1 : tunables  120   60 8 : slabdata    400    400      0
>>>> Acpi-State         20160  20160     80   48    1 : tunables  120   60 8 : slabdata    420    420      0
>>>>
>>>> I am not familiar with kernel sources, but i can do c pretty well.
>>>> BTW: Bios says i have 1024MB, but kernel sees 899MB :-?. The system is
>>>> pure HP nx6325. It happens with all the recent kernels .18-rc* .17.* and
>>>> debian's distribution 2.6.17-1-amd64-k8-smp.
>>>>
>>>> Please Cc: to me, I read lkml only when I have a good mood.
>>>>         
>> Hello,
>>
>> the bug is present again in 2.6.19 but not in 19-rc5 and not in 19-rc6.
>> The only thing changed in drivers/acpi/ is osl.c and procesor_perflib.c.
>> --- ./processor_perflib.c       2006-09-20 05:42:06.000000000 +0200
>> +++ /usr/src/linux-2.6.19/drivers/acpi/processor_perflib.c
>> 2006-12-01 00:34:06.000000000 +0100
>> @@ -83,10 +83,8 @@
>>                 goto out;
>>  
>>         ppc = (unsigned int)pr->performance_platform_limit;
>> -       if (!ppc)
>> -               goto out;
>>  
>> -       if (ppc > pr->performance->state_count)
>> +       if (ppc >= pr->performance->state_count)
>>                 goto out;
>>  
>>         cpufreq_verify_within_limits(policy, 0,
>> --- osl.c	2006-12-02 21:40:57.000000000 +0100
>> +++ /usr/src/linux-2.6.19-rc6/drivers/acpi/osl.c	2006-11-18 13:38:01.000000000 +0100
>> @@ -73,6 +73,7 @@
>>  static acpi_osd_handler acpi_irq_handler;
>>  static void *acpi_irq_context;
>>  static struct workqueue_struct *kacpid_wq;
>> +static struct workqueue_struct *kacpi_notify_wq;
>>  
>>  acpi_status acpi_os_initialize(void)
>>  {
>> @@ -91,8 +92,9 @@
>>  		return AE_NULL_ENTRY;
>>  	}
>>  	kacpid_wq = create_singlethread_workqueue("kacpid");
>> +	kacpi_notify_wq = create_singlethread_workqueue("kacpi_notify");
>>  	BUG_ON(!kacpid_wq);
>> -
>> +	BUG_ON(!kacpi_notify_wq);
>>  	return AE_OK;
>>  }
>>  
>> @@ -104,7 +106,7 @@
>>  	}
>>  
>>  	destroy_workqueue(kacpid_wq);
>> -	destroy_workqueue(kacpid_notify_wq);
>> +	destroy_workqueue(kacpi_notify_wq);
>>  
>>  	return AE_OK;
>>  }
>> @@ -567,10 +569,7 @@
>>  
>>  static void acpi_os_execute_deferred(void *context)
>>  {
>> -	struct acpi_os_dpc *dpc = NULL;
>> -
>> -
>> -	dpc = (struct acpi_os_dpc *)context;
>> +	struct acpi_os_dpc *dpc = (struct acpi_os_dpc *)context;
>>  	if (!dpc) {
>>  		printk(KERN_ERR PREFIX "Invalid (NULL) context\n");
>>  		return;
>> @@ -605,14 +604,12 @@
>>  	struct acpi_os_dpc *dpc;
>>  	struct work_struct *task;
>>  
>> -	ACPI_FUNCTION_TRACE("os_queue_for_execution");
>> -
>>  	ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
>>  			  "Scheduling function [%p(%p)] for deferred execution.\n",
>>  			  function, context));
>>  
>>  	if (!function)
>> -		return_ACPI_STATUS(AE_BAD_PARAMETER);
>> +		return AE_BAD_PARAMETER;
>>  
>>  	/*
>>  	 * Allocate/initialize DPC structure.  Note that this memory will be
>> @@ -625,26 +622,20 @@
>>  	 * from the same memory.
>>  	 */
>>  
>> -	dpc =
>> -	    kmalloc(sizeof(struct acpi_os_dpc) + sizeof(struct work_struct),
>> -		    GFP_ATOMIC);
>> +	dpc = kmalloc(sizeof(struct acpi_os_dpc) +
>> +			sizeof(struct work_struct), GFP_ATOMIC);
>>  	if (!dpc)
>> -		return_ACPI_STATUS(AE_NO_MEMORY);
>> -
>> +		return AE_NO_MEMORY;
>>  	dpc->function = function;
>>  	dpc->context = context;
>> -
>>  	task = (void *)(dpc + 1);
>>  	INIT_WORK(task, acpi_os_execute_deferred, (void *)dpc);
>> -
>> -	if (!queue_work(kacpid_wq, task)) {
>> -		ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
>> -				  "Call to queue_work() failed.\n"));
>> -		kfree(dpc);
>> +	if (!queue_work((type == OSL_NOTIFY_HANDLER)?
>> +			kacpi_notify_wq : kacpid_wq, task)) {
>>  		status = AE_ERROR;
>> +		kfree(dpc);
>>  	}
>> -
>> -	return_ACPI_STATUS(status);
>> +	return status;
>>  }
>>  
>>  EXPORT_SYMBOL(acpi_os_execute);
>>     
> -
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>   

  reply	other threads:[~2006-12-03  9:06 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-09-19 21:47 Possible bug in ACPI Dalibor Straka
2006-09-19 22:03 ` Jiri Slaby
2006-09-19 22:22   ` Dalibor Straka
2006-09-19 23:33 ` Andrew Morton
2006-09-20  7:11 ` Jarek Poplawski
2006-09-20  9:28 ` Tomasz Torcz
     [not found] ` <20061109140416.db12bcbe.akpm@osdl.org>
     [not found]   ` <20061202205140.GA12447@panelnet.cz>
2006-12-03  3:26     ` Andrew Morton
2006-12-03  9:06       ` Alexey Starikovskiy [this message]
2006-12-03 10:12         ` Andrew Morton
2006-12-03  9:30           ` Alexey Starikovskiy
2006-12-03 20:27             ` Andrew Morton
2006-12-03 21:24               ` Alexey Starikovskiy
2006-12-06 15:36                 ` Alexey Starikovskiy
2006-12-06 15:54                   ` Andrew Morton
2006-12-06 16:07                     ` Alexey Starikovskiy
2006-12-06 16:21                     ` Alexey Starikovskiy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=457293AE.2060701@linux.intel.com \
    --to=alexey.y.starikovskiy@linux.intel.com \
    --cc=akpm@osdl.org \
    --cc=dast@panelnet.cz \
    --cc=jikos@jikos.cz \
    --cc=linux-acpi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.