The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH v3 0/5] soundwire: Fixes for spurious and missing UNATTACH
@ 2022-09-14 12:09 Richard Fitzgerald
  2022-09-14 12:09 ` [PATCH v3 1/5] soundwire: cadence: fix updating slave status when a bus has multiple peripherals Richard Fitzgerald
                   ` (5 more replies)
  0 siblings, 6 replies; 10+ messages in thread
From: Richard Fitzgerald @ 2022-09-14 12:09 UTC (permalink / raw)
  To: vkoul, yung-chuan.liao, pierre-louis.bossart, sanyog.r.kale
  Cc: alsa-devel, linux-kernel, patches, Richard Fitzgerald

The bus and cadence code has several bugs that cause UNATTACH notifications
to either be sent spuriously or to be missed.

These can be seen occasionally with a single peripheral on the bus, but are
much more frequent with multiple peripherals, where several peripherals
could change state and report in consecutive PINGs.

The root of all of these bugs seems to be a code design flaw that assumed
every PING status change would be handled separately. However, PINGs are
handled by a workqueue function and there is no guarantee when that function
will be scheduled to run or how much CPU time it will receive. PINGs will
continue while the work function is handling a snapshot of a previous PING
so the code must take account that (a) status could change during the
work function and (b) there can be a backlog of changes before the IRQ work
function runs again.

Tested with 4 peripherals on 1 bus, and 8 peripherals on 2 buses.

CHANGES SINCE V2:
#4 Add a comment explaining why INTMASK isn't cleared when going around
   the update_status loop.

#5 Leave the existing error handling in sdw_program_device_num(),
   instead of suppressing the error return.
   Add a comment in sdw_handle_slave_status() explaining why the error
   is ignored.
   Re-word the explanation of why sdw_handle_slave_status() must only return
   early if it programmed a device ID.

Richard Fitzgerald (4):
  soundwire: bus: Don't lose unattach notifications
  soundwire: bus: Don't re-enumerate before status is UNATTACHED
  soundwire: cadence: Fix lost ATTACHED interrupts when enumerating
  soundwire: bus: Don't exit early if no device IDs were programmed

Simon Trimmer (1):
  soundwire: cadence: fix updating slave status when a bus has multiple
    peripherals

 drivers/soundwire/bus.c            | 44 +++++++++++++---
 drivers/soundwire/cadence_master.c | 80 ++++++++++++++++--------------
 2 files changed, 80 insertions(+), 44 deletions(-)

-- 
2.30.2


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2022-09-14 14:32 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-14 12:09 [PATCH v3 0/5] soundwire: Fixes for spurious and missing UNATTACH Richard Fitzgerald
2022-09-14 12:09 ` [PATCH v3 1/5] soundwire: cadence: fix updating slave status when a bus has multiple peripherals Richard Fitzgerald
2022-09-14 12:09 ` [PATCH v3 2/5] soundwire: bus: Don't lose unattach notifications Richard Fitzgerald
2022-09-14 12:09 ` [PATCH v3 3/5] soundwire: bus: Don't re-enumerate before status is UNATTACHED Richard Fitzgerald
2022-09-14 12:09 ` [PATCH v3 4/5] soundwire: cadence: Fix lost ATTACHED interrupts when enumerating Richard Fitzgerald
2022-09-14 13:48   ` Pierre-Louis Bossart
2022-09-14 14:30     ` Richard Fitzgerald
2022-09-14 12:09 ` [PATCH v3 5/5] soundwire: bus: Don't exit early if no device IDs were programmed Richard Fitzgerald
2022-09-14 13:58   ` Pierre-Louis Bossart
2022-09-14 14:00 ` [PATCH v3 0/5] soundwire: Fixes for spurious and missing UNATTACH Pierre-Louis Bossart

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox