lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Fri, 30 Jun 2023 19:26:49 +0200
From:   "Wilczynski, Michal" <michal.wilczynski@...el.com>
To:     Dan Williams <dan.j.williams@...el.com>,
        <linux-acpi@...r.kernel.org>
CC:     <rafael@...nel.org>, <vishal.l.verma@...el.com>, <lenb@...nel.org>,
        <dave.jiang@...el.com>, <ira.weiny@...el.com>,
        <rui.zhang@...el.com>, <linux-kernel@...r.kernel.org>,
        <nvdimm@...ts.linux.dev>,
        "Rafael J . Wysocki" <rafael.j.wysocki@...el.com>
Subject: Re: [PATCH v5 09/10] acpi/nfit: Move handler installing logic to
 driver



On 6/30/2023 7:19 PM, Dan Williams wrote:
> Wilczynski, Michal wrote:
>>
>> On 6/29/2023 10:54 PM, Dan Williams wrote:
>>> Michal Wilczynski wrote:
>>>> Currently logic for installing notifications from ACPI devices is
>>>> implemented using notify callback in struct acpi_driver. Preparations
>>>> are being made to replace acpi_driver with more generic struct
>>>> platform_driver, which doesn't contain notify callback. Furthermore
>>>> as of now handlers are being called indirectly through
>>>> acpi_notify_device(), which decreases performance.
>>>>
>>>> Call acpi_dev_install_notify_handler() at the end of .add() callback.
>>>> Call acpi_dev_remove_notify_handler() at the beginning of .remove()
>>>> callback. Change arguments passed to the notify function to match with
>>>> what's required by acpi_install_notify_handler(). Remove .notify
>>>> callback initialization in acpi_driver.
>>>>
>>>> Suggested-by: Rafael J. Wysocki <rafael.j.wysocki@...el.com>
>>>> Signed-off-by: Michal Wilczynski <michal.wilczynski@...el.com>
>>>> ---
>>>>  drivers/acpi/nfit/core.c | 24 ++++++++++++++++++------
>>>>  1 file changed, 18 insertions(+), 6 deletions(-)
>>>>
>>>> diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
>>>> index 95930e9d776c..a281bdfee8a0 100644
>>>> --- a/drivers/acpi/nfit/core.c
>>>> +++ b/drivers/acpi/nfit/core.c
>>>> @@ -3312,11 +3312,13 @@ void acpi_nfit_shutdown(void *data)
>>>>  }
>>>>  EXPORT_SYMBOL_GPL(acpi_nfit_shutdown);
>>>>  
>>>> -static void acpi_nfit_notify(struct acpi_device *adev, u32 event)
>>>> +static void acpi_nfit_notify(acpi_handle handle, u32 event, void *data)
>>>>  {
>>>> -	device_lock(&adev->dev);
>>>> -	__acpi_nfit_notify(&adev->dev, adev->handle, event);
>>>> -	device_unlock(&adev->dev);
>>>> +	struct acpi_device *device = data;
>>>> +
>>>> +	device_lock(&device->dev);
>>>> +	__acpi_nfit_notify(&device->dev, handle, event);
>>>> +	device_unlock(&device->dev);
>>>>  }
>>>>  
>>>>  static int acpi_nfit_add(struct acpi_device *adev)
>>>> @@ -3375,12 +3377,23 @@ static int acpi_nfit_add(struct acpi_device *adev)
>>>>  
>>>>  	if (rc)
>>>>  		return rc;
>>>> -	return devm_add_action_or_reset(dev, acpi_nfit_shutdown, acpi_desc);
>>>> +
>>>> +	rc = devm_add_action_or_reset(dev, acpi_nfit_shutdown, acpi_desc);
>>>> +	if (rc)
>>>> +		return rc;
>>>> +
>>>> +	return acpi_dev_install_notify_handler(adev,
>>>> +					       ACPI_DEVICE_NOTIFY,
>>>> +					       acpi_nfit_notify);
>>>>  }
>>>>  
>>>>  static void acpi_nfit_remove(struct acpi_device *adev)
>>>>  {
>>>>  	/* see acpi_nfit_unregister */
>>>> +
>>>> +	acpi_dev_remove_notify_handler(adev,
>>>> +				       ACPI_DEVICE_NOTIFY,
>>>> +				       acpi_nfit_notify);
>>> Please use devm to trigger this release rather than making
>>> acpi_nfit_remove() contain any logic.
>> I think adding separate devm action to remove event handler is not
>> necessary. I'll put the removal in the beggining of acpi_nfit_shutdown() if you
>> don't object.
> How do you plan to handle an acpi_dev_install_notify_handler() failure?
> acpi_nfit_shutdown() will need to have extra logic to know that it can
> skip acpi_dev_remove_notify_handler() in some cases and not other..
> Maybe it is ok to remove a handler that was never installed, but I would
> rather not go look that up. A devm callback for
> acpi_dev_remove_notify_handler() avoids that.

Sure, I looked at the code and it seems to me that trying to remove a callback that doesn't
exist shouldn't cause any problems. But maybe it's not very elegant and we shouldn't rely
on that behavior.

Will add separate devm action for that then.


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ