linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: "Filipe Laíns" <lains@riseup.net>,
	"Bastien Nocera" <hadess@hadess.net>,
	"Jiri Kosina" <jikos@kernel.org>,
	"Benjamin Tissoires" <benjamin.tissoires@redhat.com>
Cc: Hans de Goede <hdegoede@redhat.com>, linux-input@vger.kernel.org
Subject: [PATCH v2 00/14] HID: logitech-hidpp: Avoid hidpp_connect_event() running while probe() restarts IO
Date: Sun,  8 Oct 2023 11:54:43 +0200	[thread overview]
Message-ID: <20231008095458.8926-1-hdegoede@redhat.com> (raw)

Hi Benjamin,

Here is a v2 of my series to fix issues with hidpp_connect_event() running
while restarting IO, which now also fixes the issues you mentioned with
potentially missing connect events.

This series is best explained by a brief sketch of how probe()
looks at the end of the series (1):

Prep work:

1. All code depending on a device being in connected state is moved to
   the hidpp_connect_event() workqueue item

2. hidpp_connect_event() now checks the connected state itself by
   checking that hidpp_root_get_protocol_version() succeeds, instead
   of relying on possibly stale (racy) data in struct hidpp_device

With this in place the new probe() sequence looks like this:

1. enable_connect_event flag starts at 0, this filters out / ignores any
   connect-events in hidpp_raw_hidpp_event() avoiding
   hidpp_connect_event() getting queued before the IO restart

2. IO is started with connect-mask = 0
   this avoids hid-input and hidraw connecting while probe() is setting
   hdev->name and hdev->uniq

3. Name and serialnr are retrieved and stored in hdev

4. IO is fully restarted (including hw_open + io_start, not just hw_start)
   with the actual connect-mask.

5. enable_connect_event atomic_t is set to 1 to enable processing of
   connect events.

6. hidpp_connect_event() is queued + flushed to query the connected state
   and do the connect work if the device is connected.

7. probe() now ends with:

        /*
         * This relies on logi_dj_ll_close() being a no-op so that
         * DJ connection events will still be received.
         */
        hid_hw_close(hdev);

   Since on restarting IO it now is fully restarted so the hid_hw_open()
   there needs to be balanced. 

This series now obviously is no longer 6.6 material, instead I hope we
can get this rework (and IMHO nice cleanup) into 6.7 .

Regards,

Hans


1) For reviewing you may also want to apply the entire series and look
at the end result to help you understand why various intermediate steps
are taken.


Hans de Goede (14):
  HID: logitech-hidpp: Revert "Don't restart communication if not
    necessary"
  HID: logitech-hidpp: Move hidpp_overwrite_name() to before connect
    check
  HID: logitech-hidpp: Add hidpp_non_unifying_init() helper
  HID: logitech-hidpp: Remove connected check for non-unifying devices
  HID: logitech-hidpp: Move get_wireless_feature_index() check to
    hidpp_connect_event()
  HID: logitech-hidpp: Remove wtp_get_config() call from probe()
  HID: logitech-hidpp: Remove connected check for g920_get_config() call
  HID: logitech-hidpp: Add a hidpp_connect_and_start() helper
  HID: logitech-hidpp: Move the connected check to after restarting IO
  HID: logitech-hidpp: Move g920_get_config() to just before
    hidpp_ff_init()
  HID: logitech-hidpp: Remove unused connected param from *_connect()
  HID: logitech-hidpp: Fix connect event race
  HID: logitech-hidpp: Avoid hidpp_connect_event() running while probe()
    restarts IO
  HID: logitech-hidpp: Drop delayed_work_cb()

 drivers/hid/hid-logitech-hidpp.c | 211 +++++++++++++------------------
 1 file changed, 91 insertions(+), 120 deletions(-)

-- 
2.41.0


             reply	other threads:[~2023-10-08  9:55 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-08  9:54 Hans de Goede [this message]
2023-10-08  9:54 ` [PATCH v2 01/14] HID: logitech-hidpp: Revert "Don't restart communication if not necessary" Hans de Goede
2023-10-08  9:54 ` [PATCH v2 02/14] HID: logitech-hidpp: Move hidpp_overwrite_name() to before connect check Hans de Goede
2023-10-08  9:54 ` [PATCH v2 03/14] HID: logitech-hidpp: Add hidpp_non_unifying_init() helper Hans de Goede
2023-10-08  9:54 ` [PATCH v2 04/14] HID: logitech-hidpp: Remove connected check for non-unifying devices Hans de Goede
2023-10-08  9:54 ` [PATCH v2 05/14] HID: logitech-hidpp: Move get_wireless_feature_index() check to hidpp_connect_event() Hans de Goede
2023-10-08  9:54 ` [PATCH v2 06/14] HID: logitech-hidpp: Remove wtp_get_config() call from probe() Hans de Goede
2023-10-08  9:54 ` [PATCH v2 07/14] HID: logitech-hidpp: Remove connected check for g920_get_config() call Hans de Goede
2023-10-08  9:54 ` [PATCH v2 08/14] HID: logitech-hidpp: Add a hidpp_connect_and_start() helper Hans de Goede
2023-10-08  9:54 ` [PATCH v2 09/14] HID: logitech-hidpp: Move the connected check to after restarting IO Hans de Goede
2023-10-08  9:54 ` [PATCH v2 10/14] HID: logitech-hidpp: Move g920_get_config() to just before hidpp_ff_init() Hans de Goede
2023-10-08  9:54 ` [PATCH v2 11/14] HID: logitech-hidpp: Remove unused connected param from *_connect() Hans de Goede
2023-10-08  9:54 ` [PATCH v2 12/14] HID: logitech-hidpp: Fix connect event race Hans de Goede
2023-10-08  9:54 ` [PATCH v2 13/14] HID: logitech-hidpp: Avoid hidpp_connect_event() running while probe() restarts IO Hans de Goede
2023-10-08  9:54 ` [PATCH v2 14/14] HID: logitech-hidpp: Drop delayed_work_cb() Hans de Goede
2023-10-08 10:30 ` [PATCH v2 00/14] HID: logitech-hidpp: Avoid hidpp_connect_event() running while probe() restarts IO Hans de Goede
2023-10-09  8:13   ` Benjamin Tissoires
2023-10-09 15:00     ` Hans de Goede
2023-10-10  9:36       ` Benjamin Tissoires
2023-10-10  9:40         ` Hans de Goede

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=20231008095458.8926-1-hdegoede@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=benjamin.tissoires@redhat.com \
    --cc=hadess@hadess.net \
    --cc=jikos@kernel.org \
    --cc=lains@riseup.net \
    --cc=linux-input@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 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).