]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commit - drivers/ptp/ptp_chardev.c
ptp: Avoid deadlocks in the programmable pin code.
authorRichard Cochran <richardcochran@gmail.com>
Sun, 29 Mar 2020 14:55:10 +0000 (07:55 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 30 Mar 2020 18:16:38 +0000 (11:16 -0700)
commit62582a7ee78364c6106d09d5e0f1dc7f564be887
tree8f5a378d3400230d67c45f57bee9a14e838380cc
parent054eae82537efb9f111b5ebc2db001d7ef07dc2e
ptp: Avoid deadlocks in the programmable pin code.

The PTP Hardware Clock (PHC) subsystem offers an API for configuring
programmable pins.  User space sets or gets the settings using ioctls,
and drivers verify dialed settings via a callback.  Drivers may also
query pin settings by calling the ptp_find_pin() method.

Although the core subsystem protects concurrent access to the pin
settings, the implementation places illogical restrictions on how
drivers may call ptp_find_pin().  When enabling an auxiliary function
via the .enable(on=1) callback, drivers may invoke the pin finding
method, but when disabling with .enable(on=0) drivers are not
permitted to do so.  With the exception of the mv88e6xxx, all of the
PHC drivers do respect this restriction, but still the locking pattern
is both confusing and unnecessary.

This patch changes the locking implementation to allow PHC drivers to
freely call ptp_find_pin() from their .enable() and .verify()
callbacks.

V2 ChangeLog:
- fixed spelling in the kernel doc
- add Vladimir's tested by tag

Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Reported-by: Yangbo Lu <yangbo.lu@nxp.com>
Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/dp83640.c
drivers/ptp/ptp_chardev.c
drivers/ptp/ptp_clock.c
include/linux/ptp_clock_kernel.h