To allow users to have stable device names with the help of udev,
add the name to the udev event that is sent when a new PtP clock
is available. The key is called 'PTP_CLOCK_NAME'.
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
---
drivers/ptp/ptp_clock.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c
index c56cd0f63909..15937acb79c6 100644
--- a/drivers/ptp/ptp_clock.c
+++ b/drivers/ptp/ptp_clock.c
@@ -25,9 +25,11 @@
#define PTP_PPS_EVENT PPS_CAPTUREASSERT
#define PTP_PPS_MODE (PTP_PPS_DEFAULTS | PPS_CANWAIT | PPS_TSFMT_TSPEC)
+static int ptp_udev_uevent(const struct device *dev, struct kobj_uevent_env *env);
const struct class ptp_class = {
.name = "ptp",
- .dev_groups = ptp_groups
+ .dev_groups = ptp_groups,
+ .dev_uevent = ptp_udev_uevent
};
/* private globals */
@@ -514,6 +516,13 @@ EXPORT_SYMBOL(ptp_cancel_worker_sync);
/* module operations */
+static int ptp_udev_uevent(const struct device *dev, struct kobj_uevent_env *env)
+{
+ struct ptp_clock *ptp = container_of(dev, struct ptp_clock, dev);
+
+ return add_uevent_var(env, "PTP_CLOCK_NAME=%s", ptp->info->name);
+}
+
static void __exit ptp_exit(void)
{
class_unregister(&ptp_class);
--
2.43.0
On Tue, Oct 15, 2024 at 12:54:13PM +0200, Sven Schnelle wrote:
> To allow users to have stable device names with the help of udev,
> add the name to the udev event that is sent when a new PtP clock
> is available. The key is called 'PTP_CLOCK_NAME'.
Where are you documenting this new user/kernel api you are adding?
>
> Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
> ---
> drivers/ptp/ptp_clock.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c
> index c56cd0f63909..15937acb79c6 100644
> --- a/drivers/ptp/ptp_clock.c
> +++ b/drivers/ptp/ptp_clock.c
> @@ -25,9 +25,11 @@
> #define PTP_PPS_EVENT PPS_CAPTUREASSERT
> #define PTP_PPS_MODE (PTP_PPS_DEFAULTS | PPS_CANWAIT | PPS_TSFMT_TSPEC)
>
> +static int ptp_udev_uevent(const struct device *dev, struct kobj_uevent_env *env);
> const struct class ptp_class = {
> .name = "ptp",
> - .dev_groups = ptp_groups
> + .dev_groups = ptp_groups,
> + .dev_uevent = ptp_udev_uevent
> };
>
> /* private globals */
> @@ -514,6 +516,13 @@ EXPORT_SYMBOL(ptp_cancel_worker_sync);
>
> /* module operations */
>
> +static int ptp_udev_uevent(const struct device *dev, struct kobj_uevent_env *env)
> +{
> + struct ptp_clock *ptp = container_of(dev, struct ptp_clock, dev);
> +
> + return add_uevent_var(env, "PTP_CLOCK_NAME=%s", ptp->info->name);
Why is this needed? Can't you get the name from the sysfs paths, the
symlink should be there already.
thanks,
greg k-h
Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes:
> On Tue, Oct 15, 2024 at 12:54:13PM +0200, Sven Schnelle wrote:
>> To allow users to have stable device names with the help of udev,
>> add the name to the udev event that is sent when a new PtP clock
>> is available. The key is called 'PTP_CLOCK_NAME'.
>
> Where are you documenting this new user/kernel api you are adding?
>
>>
>> Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
>> ---
>> drivers/ptp/ptp_clock.c | 11 ++++++++++-
>> 1 file changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c
>> index c56cd0f63909..15937acb79c6 100644
>> --- a/drivers/ptp/ptp_clock.c
>> +++ b/drivers/ptp/ptp_clock.c
>> @@ -25,9 +25,11 @@
>> #define PTP_PPS_EVENT PPS_CAPTUREASSERT
>> #define PTP_PPS_MODE (PTP_PPS_DEFAULTS | PPS_CANWAIT | PPS_TSFMT_TSPEC)
>>
>> +static int ptp_udev_uevent(const struct device *dev, struct kobj_uevent_env *env);
>> const struct class ptp_class = {
>> .name = "ptp",
>> - .dev_groups = ptp_groups
>> + .dev_groups = ptp_groups,
>> + .dev_uevent = ptp_udev_uevent
>> };
>>
>> /* private globals */
>> @@ -514,6 +516,13 @@ EXPORT_SYMBOL(ptp_cancel_worker_sync);
>>
>> /* module operations */
>>
>> +static int ptp_udev_uevent(const struct device *dev, struct kobj_uevent_env *env)
>> +{
>> + struct ptp_clock *ptp = container_of(dev, struct ptp_clock, dev);
>> +
>> + return add_uevent_var(env, "PTP_CLOCK_NAME=%s", ptp->info->name);
>
> Why is this needed? Can't you get the name from the sysfs paths, the
> symlink should be there already.
You mean the 'clock_name' attribute in sysfs? That would require to
write some script to iterate over all ptp devices and check the name,
or is there a way to match that in udev?
On Tue, Oct 15, 2024 at 02:02:17PM +0200, Sven Schnelle wrote:
> Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes:
>
> > On Tue, Oct 15, 2024 at 12:54:13PM +0200, Sven Schnelle wrote:
> >> To allow users to have stable device names with the help of udev,
> >> add the name to the udev event that is sent when a new PtP clock
> >> is available. The key is called 'PTP_CLOCK_NAME'.
> >
> > Where are you documenting this new user/kernel api you are adding?
> >
> >>
> >> Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
> >> ---
> >> drivers/ptp/ptp_clock.c | 11 ++++++++++-
> >> 1 file changed, 10 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c
> >> index c56cd0f63909..15937acb79c6 100644
> >> --- a/drivers/ptp/ptp_clock.c
> >> +++ b/drivers/ptp/ptp_clock.c
> >> @@ -25,9 +25,11 @@
> >> #define PTP_PPS_EVENT PPS_CAPTUREASSERT
> >> #define PTP_PPS_MODE (PTP_PPS_DEFAULTS | PPS_CANWAIT | PPS_TSFMT_TSPEC)
> >>
> >> +static int ptp_udev_uevent(const struct device *dev, struct kobj_uevent_env *env);
> >> const struct class ptp_class = {
> >> .name = "ptp",
> >> - .dev_groups = ptp_groups
> >> + .dev_groups = ptp_groups,
> >> + .dev_uevent = ptp_udev_uevent
> >> };
> >>
> >> /* private globals */
> >> @@ -514,6 +516,13 @@ EXPORT_SYMBOL(ptp_cancel_worker_sync);
> >>
> >> /* module operations */
> >>
> >> +static int ptp_udev_uevent(const struct device *dev, struct kobj_uevent_env *env)
> >> +{
> >> + struct ptp_clock *ptp = container_of(dev, struct ptp_clock, dev);
> >> +
> >> + return add_uevent_var(env, "PTP_CLOCK_NAME=%s", ptp->info->name);
> >
> > Why is this needed? Can't you get the name from the sysfs paths, the
> > symlink should be there already.
>
> You mean the 'clock_name' attribute in sysfs?
Great, yes, it's right there.
> That would require to
> write some script to iterate over all ptp devices and check the name,
> or is there a way to match that in udev?
Yes there is. Please use that :)
thanks,
greg k-h
Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes:
> On Tue, Oct 15, 2024 at 02:02:17PM +0200, Sven Schnelle wrote:
>> Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes:
>>
>> > On Tue, Oct 15, 2024 at 12:54:13PM +0200, Sven Schnelle wrote:
>> >> To allow users to have stable device names with the help of udev,
>> >> add the name to the udev event that is sent when a new PtP clock
>> >> is available. The key is called 'PTP_CLOCK_NAME'.
>> >
>> > Where are you documenting this new user/kernel api you are adding?
>> >
>> >>
>> >> Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
>> >> ---
>> >> drivers/ptp/ptp_clock.c | 11 ++++++++++-
>> >> 1 file changed, 10 insertions(+), 1 deletion(-)
>> >>
>> >> diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c
>> >> index c56cd0f63909..15937acb79c6 100644
>> >> --- a/drivers/ptp/ptp_clock.c
>> >> +++ b/drivers/ptp/ptp_clock.c
>> >> @@ -25,9 +25,11 @@
>> >> #define PTP_PPS_EVENT PPS_CAPTUREASSERT
>> >> #define PTP_PPS_MODE (PTP_PPS_DEFAULTS | PPS_CANWAIT | PPS_TSFMT_TSPEC)
>> >>
>> >> +static int ptp_udev_uevent(const struct device *dev, struct kobj_uevent_env *env);
>> >> const struct class ptp_class = {
>> >> .name = "ptp",
>> >> - .dev_groups = ptp_groups
>> >> + .dev_groups = ptp_groups,
>> >> + .dev_uevent = ptp_udev_uevent
>> >> };
>> >>
>> >> /* private globals */
>> >> @@ -514,6 +516,13 @@ EXPORT_SYMBOL(ptp_cancel_worker_sync);
>> >>
>> >> /* module operations */
>> >>
>> >> +static int ptp_udev_uevent(const struct device *dev, struct kobj_uevent_env *env)
>> >> +{
>> >> + struct ptp_clock *ptp = container_of(dev, struct ptp_clock, dev);
>> >> +
>> >> + return add_uevent_var(env, "PTP_CLOCK_NAME=%s", ptp->info->name);
>> >
>> > Why is this needed? Can't you get the name from the sysfs paths, the
>> > symlink should be there already.
>>
>> You mean the 'clock_name' attribute in sysfs?
>
> Great, yes, it's right there.
>
>> That would require to
>> write some script to iterate over all ptp devices and check the name,
>> or is there a way to match that in udev?
>
> Yes there is. Please use that :)
Indeed. Sorry, will drop the patch.
© 2016 - 2026 Red Hat, Inc.