All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Williams <dan.j.williams@intel.com>
To: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: Lv Zheng <lv.zheng@intel.com>,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	"Rafael J . Wysocki" <rjw@rjwysocki.net>,
	Len Brown <len.brown@intel.com>, Lv Zheng <zetalog@gmail.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linux ACPI <linux-acpi@vger.kernel.org>
Subject: Re: [PATCH v5] ACPICA: Tables: Add mechanism to allow to balance late stage acpi_get_table() independently
Date: Wed, 7 Jun 2017 14:24:48 -0700	[thread overview]
Message-ID: <CAPcyv4gF00UnF2+cnVxrGm_7vCqCb6Fr=qHnd2aBaBudvVR40Q@mail.gmail.com> (raw)
In-Reply-To: <CAJZ5v0j6ZB=JXvDX3hjoRK-Eir3ZWVda2yvqkyT31X0EWLa03g@mail.gmail.com>

On Wed, Jun 7, 2017 at 2:14 PM, Rafael J. Wysocki <rafael@kernel.org> wrote:
> On Wed, Jun 7, 2017 at 8:41 AM, Dan Williams <dan.j.williams@intel.com> wrote:
>> On Tue, Jun 6, 2017 at 9:54 PM, Lv Zheng <lv.zheng@intel.com> wrote:
>>> Considering this case:
>>> 1. A program opens a sysfs table file 65535 times, it can increase
>>>    validation_count and first increment cause the table to be mapped:
>>>     validation_count = 65535
>>> 2. AML execution causes "Load" to be executed on the same table, this time
>>>    it cannot increase validation_count, so validation_count remains:
>>>     validation_count = 65535
>>> 3. The program closes sysfs table file 65535 times, it can decrease
>>>    validation_count and the last decrement cause the table to be unmapped:
>>>     validation_count = 0
>>> 4. AML code still accessing the loaded table, kernel crash can be observed.
>>>
>>> This is because orginally ACPICA doesn't support unmapping tables during
>>> OS late stage. So the current code only allows unmapping tables during OS
>>> early stage, and for late stage, no acpi_put_table() clones should be
>>> invoked, especially cases that can trigger frequent invocations of
>>> acpi_get_table()/acpi_put_table() are forbidden:
>>> 1. sysfs table accesses
>>> 2. dynamic Load/Unload opcode executions
>>> 3. acpi_load_table()
>>> 4. etc.
>>> Such frequent acpi_put_table() balance changes have to be done altogether.
>>>
>>> This philosophy is not convenient for Linux driver writers. Since the API
>>> is just there, developers will start to use acpi_put_table() during late
>>> stage. So we need to consider a better mechanism to allow them to safely
>>> invoke acpi_put_table().
>>>
>>> This patch provides such a mechanism by adding a validation_count
>>> threashold. When it is reached, the validation_count can no longer be
>>> incremented/decremented to invalidate the table descriptor (means
>>> preventing table unmappings) so that acpi_put_table() balance changes can be
>>> done independently to each others.
>>>
>>> Note: code added in acpi_tb_put_table() is actually a no-op but changes the
>>> warning message into a warning once message. Lv Zheng.
>>>
>>
>> This still seems to be unnecessary gymnastics to keep the validation
>> count around and make it work for random drivers.
>
> Well, I'm not sure I agree here.
>
> If we can make it work at one point, it should not be too hard to
> maintain that status.
>

I agree with that, my concern was with driver writers needing to be
worried about when it is safe to call acpi_put_table(). This reference
count behaves differently than other reference counts like kobjects.
The difference is not necessarily bad, but hopefully it can be
contained within the acpi core.

  reply	other threads:[~2017-06-07 21:24 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-27  8:22 [PATCH v2 1/2] ACPICA: Tables: Fix regression introduced by a too early mechanism enabling Lv Zheng
2017-04-27  8:22 ` [PATCH v2 2/2] ACPI: Fix memory mapping leaks in current sysfs dumpable ACPI tables support Lv Zheng
2017-04-27 22:32   ` Rafael J. Wysocki
2017-04-27 22:30 ` [PATCH v2 1/2] ACPICA: Tables: Fix regression introduced by a too early mechanism enabling Rafael J. Wysocki
2017-04-28  1:24   ` Zheng, Lv
2017-04-28  3:57   ` Zheng, Lv
2017-04-28  5:27 ` [PATCH v2 1/4] " Lv Zheng
2017-04-28  5:30   ` Zheng, Lv
2017-04-28  5:28 ` [PATCH v3 " Lv Zheng
2017-04-28  5:30 ` [PATCH v3 2/4] ACPICA: Tables: Add mechanism to allow to balance late stage acpi_get_table() independently Lv Zheng
2017-04-28 20:56   ` Rafael J. Wysocki
2017-05-04  7:18     ` Zheng, Lv
2017-05-04 15:45       ` Dan Williams
2017-05-05  0:53         ` Zheng, Lv
2017-05-05 20:43       ` Rafael J. Wysocki
2017-05-09  1:58         ` Zheng, Lv
2017-04-28  5:30 ` [PATCH v3 3/4] ACPI: sysfs: Fix acpi_get_table() leak Lv Zheng
2017-04-28  5:30 ` [PATCH v3 4/4] ACPI: Fix memory mapping leaks in current sysfs dumpable ACPI tables support Lv Zheng
2017-05-09  5:57 ` [PATCH v4 1/4] ACPICA: Tables: Fix regression introduced by a too early mechanism enabling Lv Zheng
2017-05-09  5:57 ` [PATCH v4 2/4] ACPICA: Tables: Add mechanism to allow to balance late stage acpi_get_table() independently Lv Zheng
2017-05-12 21:03   ` Rafael J. Wysocki
2017-05-12 21:41     ` Rafael J. Wysocki
2017-05-15  6:32     ` Zheng, Lv
2017-05-09  5:57 ` [PATCH v4 3/4] ACPI: sysfs: Fix acpi_get_table() leak Lv Zheng
2017-05-09  5:57 ` [PATCH v4 4/4] ACPI: Fix memory mapping leaks in current sysfs dumpable ACPI tables support Lv Zheng
2017-06-12 13:12   ` Rafael J. Wysocki
2017-06-07  4:54 ` [PATCH v5] ACPICA: Tables: Add mechanism to allow to balance late stage acpi_get_table() independently Lv Zheng
2017-06-07  6:41   ` Dan Williams
2017-06-07 21:14     ` Rafael J. Wysocki
2017-06-07 21:24       ` Dan Williams [this message]
2017-06-08  2:24         ` Zheng, Lv

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='CAPcyv4gF00UnF2+cnVxrGm_7vCqCb6Fr=qHnd2aBaBudvVR40Q@mail.gmail.com' \
    --to=dan.j.williams@intel.com \
    --cc=len.brown@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lv.zheng@intel.com \
    --cc=rafael.j.wysocki@intel.com \
    --cc=rafael@kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=zetalog@gmail.com \
    /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.