Linux ACPI
 help / color / mirror / Atom feed
From: Len Brown <lenb@kernel.org>
To: Ingo Molnar <mingo@elte.hu>
Cc: linux-acpi@vger.kernel.org,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [PATCH 03/15] ACPICA: move common private headers under kernel/acpi/acpica/
Date: Fri, 02 Jan 2009 15:48:19 -0500 (EST)	[thread overview]
Message-ID: <alpine.LFD.2.00.0901021438060.3590@localhost.localdomain> (raw)
In-Reply-To: <20090102191451.GB14249@elte.hu>

> hm, dunno. Do we really want to introduce 'driver/platform' space items 
> like this in the core kernel/* ?

This patch series applies only to the non-driver code.
The ACPI drivers remain in drivers/acpi/.

The code being moved here statically builds into the kernel
on multiple architectures, x86 and ia64.
If you can recommend a more  logical home
for it in the source tree, I'm all ears.

> If it goes there then IMHO the ACPI code needs to be cleaned up 
> _significantly_ to not wrap native Linux calls like spinlocks, allocators, 
> etc.

Are there different style guidelines for the src/kernel/
directory versus other parts of the source tree?

The acpi/acpica/ sub-directory is a processed version of code that
we share with BSD, opensolaris, and every ACPI-capable OS on Earth
besides Microsoft's.  There is a huge commmon benefit
to that sharing, and the Linux community's tolerance of wrappers,
shims, and other unconventional things allows that sharing to
work without an infinite amount of additional make-work.

Indeed, consolidating the ACPICA code under a single acpica/
sub-directory to better identify it is one of the main
benefits of this patch.  Before the split between
Linux code and ACPICA code was less clear.
Maybe I should add a README.txt to that directory to clarify?

> Random example - i dont think stuff like this is readable [in to-be 
> kernel/acpi/utilities/utcache.c]:
> 
>         if (cache->current_depth >= cache->max_depth) {
>                 ACPI_FREE(object);
>                 ACPI_MEM_TRACKING(cache->total_freed++);
>         }
> 
>         /* Otherwise put this object back into the cache */
> 
>         else {
>                 status = acpi_ut_acquire_mutex(ACPI_MTX_CACHES);
>                 if (ACPI_FAILURE(status)) {
>                         return (status);
>                 }
> 
> acpi_ut_acquire_mutex() under [to-be] kernel/acpi/utilities/utmutex.c 
> looks absolutely horrible, redirected after some debugging layer to its 
> final destination:
> 
> ./include/acpi/acpiosxf.h:#define acpi_os_acquire_mutex(handle,time) 
> acpi_os_wait_semaphore (handle, 1, time), which does [kernel/acpi/osl.c]:
> 
> /*
>  * TODO: Support for units > 1?
>  */
> acpi_status acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 timeout)
> {
> 	acpi_status status = AE_OK;
> 	struct semaphore *sem = (struct semaphore *)handle;
> 	long jiffies;
> 	int ret = 0;
> 
> 	if (!sem || (units < 1))
> 		return AE_BAD_PARAMETER;
> 
> 	if (units > 1)
> 		return AE_SUPPORT;
> 
> 	ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Waiting for semaphore[%p|%d|%d]\n",
> 			  handle, units, timeout));
> 
> 	if (timeout == ACPI_WAIT_FOREVER)
> 		jiffies = MAX_SCHEDULE_TIMEOUT;
> 	else
> 		jiffies = msecs_to_jiffies(timeout);
> 	
> 	ret = down_timeout(sem, jiffies);
> 	if (ret)
> 		status = AE_TIME;
> 
> 	if (ACPI_FAILURE(status)) {
> 		ACPI_DEBUG_PRINT((ACPI_DB_MUTEX,
> 				  "Failed to acquire semaphore[%p|%d|%d], %s",
> 				  handle, units, timeout,
> 				  acpi_format_exception(status)));
> 	} else {
> 		ACPI_DEBUG_PRINT((ACPI_DB_MUTEX,
> 				  "Acquired semaphore[%p|%d|%d]", handle,
> 				  units, timeout));
> 	}
> 
> 	return status;
> }
> 
> so it's a glorified down_timeout(). While we have mutex_timeout(). What's 
> the plan here?

ACPICA has required the OS to supply acpi_os_wait_semaphore()
for 10 years.  The timeout in the original Linux implementation
would make you vomit.

We were delighted when Matt gaive us down_timeout() in Linux
starting in 2.6.26.

We went out of our way to give ACPICA the ability to take advantage
of spinlock vs. mutex. vs semaphore if the OS provides them.
However, when mutexes were added to Linux in 2.6.15, we
didn't cut over to them.  I don't recall why at the moment,
the question has come up recently in other conversations.
Perhaps it was that we didn't have a mutex_timeout().
We have one now?

There are plenty of places where we can polish the Linux/ACPI code,
the Linux/ACPI drivers, and the ACPICA code, and I'm all for it.
However, I don't think that should gate moving forward with
a logical source tree layout.

thanks
Len Brown, Intel Open Source Technology Center



  reply	other threads:[~2009-01-02 20:48 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-31 10:51 RFC - ACPI source code re-org Len Brown
2008-12-31 10:51 ` [PATCH 01/15] ACPI: create kernel/acpi/ Len Brown
2008-12-31 10:51   ` [PATCH 02/15] ACPI: delete include/acpi/platform/ Len Brown
2008-12-31 10:51   ` [PATCH 03/15] ACPICA: move common private headers under kernel/acpi/acpica/ Len Brown
2009-01-02 19:14     ` Ingo Molnar
2009-01-02 20:48       ` Len Brown [this message]
2009-01-07 22:10         ` Ingo Molnar
2009-01-08 16:03           ` Christoph Hellwig
2009-01-09  4:34             ` Len Brown
2009-01-11  4:09               ` Ingo Molnar
2009-01-02 21:56       ` Len Brown
2008-12-31 10:51   ` [PATCH 04/15] ACPICA: acdebug.h is private Len Brown
2008-12-31 10:51   ` [PATCH 05/15] ACPICA: delete acdisasm.h Len Brown
2008-12-31 10:51   ` [PATCH 06/15] ACPICA: acdispat.h is private Len Brown
2008-12-31 10:51   ` [PATCH 07/15] ACPICA: acevents.h " Len Brown
2008-12-31 10:51   ` [PATCH 08/15] ACPICA: acinterp.h " Len Brown
2008-12-31 10:51   ` [PATCH 09/15] ACPICA: acnamesp.h " Len Brown
2008-12-31 10:52   ` [PATCH 10/15] ACPICA: acopcode.h " Len Brown
2008-12-31 10:52   ` [PATCH 11/15] ACPICA: acparser.h " Len Brown
2008-12-31 10:52   ` [PATCH 12/15] ACPICA: acpredef.h " Len Brown
2008-12-31 10:52   ` [PATCH 13/15] ACPICA: acresrc.h, amlresrc.h are private Len Brown
2008-12-31 10:52   ` [PATCH 14/15] ACPICA: actables.h is private Len Brown
2008-12-31 10:52   ` [PATCH 15/15] ACPICA: amlcode.h " Len Brown
2008-12-31 13:39   ` [PATCH 01/15] ACPI: create kernel/acpi/ Sam Ravnborg
2008-12-31 14:21     ` Andi Kleen
2008-12-31 15:34       ` Sam Ravnborg
2009-01-02 21:44         ` [incremental-PATCH-for-Sam's-Review] ACPI: use ccflags-y instead of EXTRA_CFLAGS Len Brown
2009-01-02 21:52           ` Sam Ravnborg
2009-01-02 21:56             ` Andi Kleen
2009-01-02 22:01               ` Sam Ravnborg
2009-01-02 22:17             ` Len Brown
2009-01-02 22:46               ` Andi Kleen
2009-01-02 21:30     ` [PATCH 01/15] ACPI: create kernel/acpi/ Len Brown

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=alpine.LFD.2.00.0901021438060.3590@localhost.localdomain \
    --to=lenb@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=hpa@zytor.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox