linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: Andrzej Pietrasiewicz <andrzej.p@collabora.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: linux-input@vger.kernel.org, linux-acpi@vger.kernel.org,
	linux-iio@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	linux-samsung-soc@vger.kernel.org, linux-tegra@vger.kernel.org,
	patches@opensource.cirrus.com,
	ibm-acpi-devel@lists.sourceforge.net,
	platform-driver-x86@vger.kernel.org,
	"Rafael J . Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>, Jonathan Cameron <jic23@kernel.org>,
	Hartmut Knaack <knaack.h@gmx.de>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Peter Meerwald-Stadler <pmeerw@pmeerw.net>,
	Kukjin Kim <kgene@kernel.org>,
	Krzysztof Kozlowski <krzk@kernel.org>,
	Shawn Guo <shawnguo@kernel.org>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	Pengutronix Kernel Team <kernel@pengutronix.de>,
	Fabio Estevam <festevam@gmail.com>,
	NXP Linux Team <linux-imx@nxp.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Sylvain Lemieux <slemieux.tyco@gmail.com>,
	Laxman Dewangan <ldewangan@nvidia.com>,
	Thierry Reding <thierry.reding@gmail.com>,
	Jonathan Hunter <jonathanh@nvidia.com>,
	Barry Song <baohua@kernel.org>,
	Michael Hennerich <michael.hennerich@analog.com>,
	Nick Dyer <nick@shmanahar.org>, Ferruh Yigit <fery@cypress.com>,
	Sangwon Jee <jeesw@melfas.com>,
	Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>,
	kernel@collabora.com, Peter Hutterer <peter.hutterer@redhat.com>,
	Benjamin Tissoires <btissoir@redhat.com>
Subject: Re: [PATCHv2 0/7] Support inhibiting input devices
Date: Tue, 2 Jun 2020 22:19:29 +0200	[thread overview]
Message-ID: <8f97d2e1-497a-495d-bc82-f46dbeba440c@redhat.com> (raw)
In-Reply-To: <82e9f2ab-a16e-51ee-1413-bedf0122026a@collabora.com>

Hi,

On 6/2/20 8:50 PM, Andrzej Pietrasiewicz wrote:
> Hi Dmitry,
> 
> W dniu 02.06.2020 o 19:52, Dmitry Torokhov pisze:
>> Hi Andrzej,
>>
>> On Tue, Jun 02, 2020 at 06:56:40PM +0200, Andrzej Pietrasiewicz wrote:
>>> Hi Dmitry,
>>>
>>> W dniu 27.05.2020 o 08:34, Dmitry Torokhov pisze:
>>>> That said, I think the way we should handle inhibit/uninhibit, is that
>>>> if we have the callback defined, then we call it, and only call open and
>>>> close if uninhibit or inhibit are _not_ defined.
>>>>
>>>
>>> If I understand you correctly you suggest to call either inhibit,
>>> if provided or close, if inhibit is not provided, but not both,
>>> that is, if both are provided then on the inhibit path only
>>> inhibit is called. And, consequently, you suggest to call either
>>> uninhibit or open, but not both. The rest of my mail makes this
>>> assumption, so kindly confirm if I understand you correctly.
>>
>> Yes, that is correct. If a driver wants really fine-grained control, it
>> will provide inhibit (or both inhibit and close), otherwise it will rely
>> on close in place of inhibit.
>>
>>>
>>> In my opinion this idea will not work.
>>>
>>> The first question is should we be able to inhibit a device
>>> which is not opened? In my opinion we should, in order to be
>>> able to inhibit a device in anticipation without needing to
>>> open it first.
>>
>> I agree.
>>
>>>
>>> Then what does opening (with input_open_device()) an inhibited
>>> device mean? Should it succeed or should it fail?
>>
>> It should succeed.
>>
>>> If it is not
>>> the first opening then effectively it boils down to increasing
>>> device's and handle's counters, so we can allow it to succeed.
>>> If, however, the device is being opened for the first time,
>>> the ->open() method wants to be called, but that somehow
>>> contradicts the device's inhibited state. So a logical thing
>>> to do is to either fail input_open_device() or postpone ->open()
>>> invocation to the moment of uninhibiting - and the latter is
>>> what the patches in this series currently do.
>>>
>>> Failing input_open_device() because of the inhibited state is
>>> not the right thing to do. Let me explain. Suppose that a device
>>> is already inhibited and then a new matching handler appears
>>> in the system. Most handlers (apm-power.c, evbug.c, input-leds.c,
>>> mac_hid.c, sysrq.c, vt/keyboard.c and rfkill/input.c) don't create
>>> any character devices (only evdev.c, joydev.c and mousedev.c do),
>>> so for them it makes no sense to delay calling input_open_device()
>>> and it is called in handler's ->connect(). If input_open_device()
>>> now fails, we have lost the only chance for this ->connect() to
>>> succeed.
>>>
>>> Summarizing, IMO the uninhibit path should be calling both
>>> ->open() and ->uninhibit() (if provided), and conversely, the inhibit
>>> path should be calling both ->inhibit() and ->close() (if provided).
>>
>> So what you are trying to say is that you see inhibit as something that
>> is done in addition to what happens in close. But what exactly do you
>> want to do in inhibit, in addition to what close is doing?
> 
> See below (*).
> 
>>
>> In my view, if we want to have a dedicated inhibit callback, then it
>> will do everything that close does, they both are aware of each other
>> and can sort out the state transitions between them. For drivers that do
>> not have dedicated inhibit/uninhibit, we can use open and close
>> handlers, and have input core sort out when each should be called. That
>> means that we should not call dev->open() in input_open_device() when
>> device is inhibited (and same for dev->close() in input_close_device).
>> And when uninhibiting, we should not call dev->open() when there are no
>> users for the device, and no dev->close() when inhibiting with no users.
>>
>> Do you see any problems with this approach?
> 
> My concern is that if e.g. both ->open() and ->uninhibit() are provided,
> then in certain circumstances ->open() won't be called:
> 
> 1. users == 0
> 2. inhibit happens
> 3. input_open_device() happens, ->open() not called
> 4. uninhibit happens
> 5. as part of uninhibit ->uninhibit() is only called, but ->open() is not.
> 
> They way I understand your answer is that we implicitly impose requirements
> on drivers which choose to implement e.g. both ->open() and ->uninhibit():
> in such a case ->uninhibit() should be doing exactly the same things as
> ->open() does. Which leads to a conclusion that in practice no drivers
> should choose to implement both, otherwise they must be aware that
> ->uninhibit() can be sometimes called instead of ->open(). Then ->open()
> becomes synonymous with ->uninhibit(), and ->close() with ->inhibit().
> Or, maybe, then ->inhibit() can be a superset of ->close() and
> ->uninhibit() a superset of ->open().
> 
> If such an approach is ok with you, it is ok with me, too.
> 
> (*)
> Calling both ->inhibit() and ->close() (if they are provided) allows
> drivers to go fancy and fail inhibiting (which is impossible using
> only ->close() as it does not return a value, but ->inhibit() by design
> does). Then ->uninhibit() is mostly for symmetry.

All the complications discussed above are exactly why I still
believe that there should be only open and close.

If error propagation on inhibit is considered as something
really important to have then we can make the input driver close
callback return an error (*), note I'm talking about the
driver close callback here, not the system call.

If the close callback is called for actually closing the fd
referring to the input node, then the new error return code
can be ignored, as we already do for errors on close atm
since the driver close callback returns void.

I still have not seen a very convincing argument for having
separate inhibit and close callbacks and as the messy discussion
above shows, having 2 such very similar yet subtly different
calls seems like a bad idea...

Regards,

Hans


*) This will require a flag day where "return 0" is added
to all current close handlers


  reply	other threads:[~2020-06-02 20:19 UTC|newest]

Thread overview: 101+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-30 16:16 [PATCH 0/2] Support inhibiting input devices Andrzej Pietrasiewicz
2020-04-30 16:16 ` [PATCH 1/2] Input: Add "inhibited" property Andrzej Pietrasiewicz
2020-05-06  0:27   ` Dmitry Torokhov
2020-05-15 16:49     ` [PATCHv2 0/7] Support inhibiting input devices Andrzej Pietrasiewicz
2020-05-15 16:51       ` [PATCHv2 1/7] Input: add input_device_enabled() Andrzej Pietrasiewicz
2020-05-15 16:51       ` [PATCHv2 2/7] Input: use input_device_enabled() Andrzej Pietrasiewicz
2020-05-15 16:52       ` [PATCHv2 4/7] iio: adc: exynos: Use input_device_enabled() Andrzej Pietrasiewicz
2020-05-15 16:52       ` [PATCHv2 5/7] platform/x86: thinkpad_acpi: " Andrzej Pietrasiewicz
2020-05-15 17:02         ` Henrique de Moraes Holschuh
2020-05-15 16:52       ` [PATCHv2 6/7] Input: Add "inhibited" property Andrzej Pietrasiewicz
2020-05-15 16:52       ` [PATCHv2 7/7] Input: elan_i2c: Support inhibiting Andrzej Pietrasiewicz
2020-05-15 16:53       ` [PATCHv2 3/7] ACPI: button: Use input_device_enabled() helper Andrzej Pietrasiewicz
2020-05-18 12:40         ` Rafael J. Wysocki
2020-05-15 18:19       ` [PATCHv2 0/7] Support inhibiting input devices Hans de Goede
2020-05-17 22:55         ` Peter Hutterer
2020-05-18  2:40           ` Dmitry Torokhov
2020-05-18  7:36             ` Hans de Goede
2020-05-22 15:35             ` Andrzej Pietrasiewicz
2020-05-27  6:13               ` Peter Hutterer
2020-05-18 10:48         ` Andrzej Pietrasiewicz
2020-05-18 12:24           ` Hans de Goede
2020-05-18 13:49             ` Andrzej Pietrasiewicz
2020-05-18 14:23               ` Hans de Goede
2020-05-19  9:02                 ` Andrzej Pietrasiewicz
2020-05-19  9:36                   ` Hans de Goede
2020-05-27  6:34                     ` Dmitry Torokhov
2020-06-02 16:56                       ` Andrzej Pietrasiewicz
2020-06-02 17:52                         ` Dmitry Torokhov
2020-06-02 18:50                           ` Andrzej Pietrasiewicz
2020-06-02 20:19                             ` Hans de Goede [this message]
2020-06-03 13:07                               ` Andrzej Pietrasiewicz
2020-06-03 17:38                                 ` Hans de Goede
2020-06-03 17:54                                   ` Andrzej Pietrasiewicz
2020-06-03 19:37                                     ` Hans de Goede
2020-06-04  7:28                                       ` Dmitry Torokhov
2020-06-05 17:33                                         ` [PATCH v3 " Andrzej Pietrasiewicz
2020-06-05 17:33                                           ` [PATCH v3 1/7] Input: add input_device_enabled() Andrzej Pietrasiewicz
2020-06-05 17:33                                           ` [PATCH v3 2/7] Input: use input_device_enabled() Andrzej Pietrasiewicz
2020-06-05 17:33                                           ` [PATCH v3 3/7] ACPI: button: Access input device's users under appropriate mutex Andrzej Pietrasiewicz
2020-06-05 17:33                                           ` [PATCH v3 4/7] ACPI: button: Use input_device_enabled() helper Andrzej Pietrasiewicz
2020-06-05 17:33                                           ` [PATCH v3 5/7] iio: adc: exynos: Use input_device_enabled() Andrzej Pietrasiewicz
2020-06-05 19:49                                             ` Michał Mirosław
2020-06-05 17:33                                           ` [PATCH v3 6/7] platform/x86: thinkpad_acpi: " Andrzej Pietrasiewicz
2020-06-05 17:33                                           ` [PATCH v3 7/7] Input: Add "inhibited" property Andrzej Pietrasiewicz
2020-06-05 17:41                                             ` Hans de Goede
2020-06-08 11:22                                               ` [PATCH v4 0/7] Support inhibiting input devices Andrzej Pietrasiewicz
2020-06-08 11:22                                                 ` [PATCH v4 1/7] Input: add input_device_enabled() Andrzej Pietrasiewicz
2020-12-03  6:25                                                   ` Dmitry Torokhov
2020-06-08 11:22                                                 ` [PATCH v4 2/7] Input: use input_device_enabled() Andrzej Pietrasiewicz
2020-12-03  6:26                                                   ` Dmitry Torokhov
     [not found]                                                   ` <CGME20201207133237eucas1p26f8484944760a14e51dc7353ed33cd28@eucas1p2.samsung.com>
2020-12-07 13:32                                                     ` Marek Szyprowski
2020-12-07 15:50                                                       ` Andrzej Pietrasiewicz
2020-12-08 10:05                                                         ` Marek Szyprowski
2020-12-09  6:37                                                           ` Dmitry Torokhov
2020-12-11  7:09                                                             ` [PATCH] Input: cyapa - do not call input_device_enabled from power mode handler Dmitry Torokhov
2020-12-11  8:22                                                               ` Marek Szyprowski
2020-12-11  8:31                                                                 ` Dmitry Torokhov
2020-06-08 11:22                                                 ` [PATCH v4 3/7] ACPI: button: Access input device's users under appropriate mutex Andrzej Pietrasiewicz
2020-06-24 15:00                                                   ` Rafael J. Wysocki
2020-06-25  5:23                                                     ` Dmitry Torokhov
2020-06-25 10:55                                                       ` Rafael J. Wysocki
2020-10-05  5:08                                                         ` Dmitry Torokhov
2020-06-08 11:22                                                 ` [PATCH v4 4/7] ACPI: button: Use input_device_enabled() helper Andrzej Pietrasiewicz
2020-06-25  5:24                                                   ` Dmitry Torokhov
2020-10-05  5:06                                                     ` Dmitry Torokhov
2020-06-08 11:22                                                 ` [PATCH v4 5/7] iio: adc: exynos: Use input_device_enabled() Andrzej Pietrasiewicz
2020-06-10  1:28                                                   ` Michał Mirosław
2020-06-10  7:52                                                     ` [FIXED PATCH " Andrzej Pietrasiewicz
2020-06-08 11:22                                                 ` [PATCH v4 6/7] platform/x86: thinkpad_acpi: " Andrzej Pietrasiewicz
2020-06-08 11:22                                                 ` [PATCH v4 7/7] Input: Add "inhibited" property Andrzej Pietrasiewicz
2020-10-05 18:10                                                   ` Dmitry Torokhov
2020-10-06 13:04                                                     ` Andrzej Pietrasiewicz
2020-10-07  1:11                                                       ` Dmitry Torokhov
2020-10-07  1:12                                                         ` Dmitry Torokhov
2020-12-03  6:26                                                           ` Dmitry Torokhov
2020-06-10  9:49                                                 ` [PATCH v4 0/7] Support inhibiting input devices Hans de Goede
2020-06-10 10:38                                                   ` Rafael J. Wysocki
2020-06-10 13:12                                                     ` Andrzej Pietrasiewicz
2020-06-10 13:21                                                       ` Hans de Goede
2020-06-10 13:41                                                         ` Andrzej Pietrasiewicz
2020-06-12  8:30                                                           ` Hans de Goede
2020-06-12  8:47                                                             ` Andrzej Pietrasiewicz
2020-06-16 17:29                                                             ` [PATCH] Input: document inhibiting Andrzej Pietrasiewicz
2020-06-16 17:38                                                               ` Randy Dunlap
2020-06-17  7:44                                                               ` Hans de Goede
2020-06-17 10:18                                                                 ` [PATCH v2] " Andrzej Pietrasiewicz
2020-06-17 10:21                                                                   ` Hans de Goede
2020-06-17 16:52                                                                   ` Randy Dunlap
2020-06-23 13:35                                                                   ` Pavel Machek
2020-12-03  6:27                                                                   ` Dmitry Torokhov
2020-06-10 14:01                                                         ` [PATCH v4 0/7] Support inhibiting input devices Rafael J. Wysocki
2020-06-10 13:52                                                     ` Hans de Goede
2020-06-10 18:28                                                     ` Dmitry Torokhov
2020-06-12  8:14                                                       ` Hans de Goede
2020-06-12  8:17                                                 ` Hans de Goede
2020-08-03 14:40                                                   ` Andrzej Pietrasiewicz
2020-06-07 20:24                                           ` [PATCH v3 " Pavel Machek
2020-06-08  5:37                                             ` Dmitry Torokhov
2020-06-08  9:28                                               ` Andrzej Pietrasiewicz
2020-04-30 16:16 ` [PATCH 2/2] Input: elan_i2c: Support inhibiting Andrzej Pietrasiewicz
2020-12-03  6:29   ` Dmitry Torokhov

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=8f97d2e1-497a-495d-bc82-f46dbeba440c@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=andrzej.p@collabora.com \
    --cc=baohua@kernel.org \
    --cc=btissoir@redhat.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=fery@cypress.com \
    --cc=festevam@gmail.com \
    --cc=ibm-acpi-devel@lists.sourceforge.net \
    --cc=ibm-acpi@hmh.eng.br \
    --cc=jeesw@melfas.com \
    --cc=jic23@kernel.org \
    --cc=jonathanh@nvidia.com \
    --cc=kernel@collabora.com \
    --cc=kernel@pengutronix.de \
    --cc=kgene@kernel.org \
    --cc=knaack.h@gmx.de \
    --cc=krzk@kernel.org \
    --cc=lars@metafoo.de \
    --cc=ldewangan@nvidia.com \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=michael.hennerich@analog.com \
    --cc=nick@shmanahar.org \
    --cc=patches@opensource.cirrus.com \
    --cc=peter.hutterer@redhat.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=pmeerw@pmeerw.net \
    --cc=rjw@rjwysocki.net \
    --cc=s.hauer@pengutronix.de \
    --cc=shawnguo@kernel.org \
    --cc=slemieux.tyco@gmail.com \
    --cc=thierry.reding@gmail.com \
    --cc=vz@mleia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).