All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] include/uapi pps.h: increase PPS_MAX_SOURCES value
@ 2023-06-30  7:18 Rodolfo Giometti
  2023-06-30  7:18 ` [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define Rodolfo Giometti
  0 siblings, 1 reply; 12+ messages in thread
From: Rodolfo Giometti @ 2023-06-30  7:18 UTC (permalink / raw
  To: linux-kernel; +Cc: Greg Kroah-Hartman, Charlie Johnston, Rodolfo Giometti

From: Charlie Johnston <charlie.johnston@ni.com>

For consistency with what others use for minors, this change sets
PPS_MAX_SOURCES to MINORMASK.

The PPS_MAX_SOURCES value is currently set to 16. In some cases this
was not sufficient for a system. For example, a system with multiple
(4+) PCIe cards each with 4 PTP-capable ethernet interfaces could run
out of the available PPS major:minors if each interface registers a
PPS source.

Signed-off-by: Charlie Johnston <charlie.johnston@ni.com>
Acked-by: Rodolfo Giometti <giometti@enneenne.com>
---
 include/uapi/linux/pps.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/uapi/linux/pps.h b/include/uapi/linux/pps.h
index 009ebcd8ced5..90f2e86020ba 100644
--- a/include/uapi/linux/pps.h
+++ b/include/uapi/linux/pps.h
@@ -26,7 +26,7 @@
 #include <linux/types.h>
 
 #define PPS_VERSION		"5.3.6"
-#define PPS_MAX_SOURCES		16		/* should be enough... */
+#define PPS_MAX_SOURCES		MINORMASK
 
 /* Implementation note: the logical states ``assert'' and ``clear''
  * are implemented in terms of the chip register, i.e. ``assert''
-- 
2.34.1


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

* [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define
  2023-06-30  7:18 [PATCH 1/2] include/uapi pps.h: increase PPS_MAX_SOURCES value Rodolfo Giometti
@ 2023-06-30  7:18 ` Rodolfo Giometti
  2023-06-30  7:31   ` Greg Kroah-Hartman
  0 siblings, 1 reply; 12+ messages in thread
From: Rodolfo Giometti @ 2023-06-30  7:18 UTC (permalink / raw
  To: linux-kernel; +Cc: Greg Kroah-Hartman, Rodolfo Giometti

Userspace PPS clients should not known about how many PPS sources can
be defined within the system (nor the rfc2783 say so), so we can
safely drop this define since is not used anymore in the kernel too.

Signed-off-by: Rodolfo Giometti <giometti@enneenne.com>
---
 drivers/pps/pps.c        | 6 +++---
 include/uapi/linux/pps.h | 1 -
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
index 5d19baae6a38..1a6131608036 100644
--- a/drivers/pps/pps.c
+++ b/drivers/pps/pps.c
@@ -354,7 +354,7 @@ int pps_register_cdev(struct pps_device *pps)
 	 * Get new ID for the new PPS source.  After idr_alloc() calling
 	 * the new source will be freely available into the kernel.
 	 */
-	err = idr_alloc(&pps_idr, pps, 0, PPS_MAX_SOURCES, GFP_KERNEL);
+	err = idr_alloc(&pps_idr, pps, 0, MINORMASK, GFP_KERNEL);
 	if (err < 0) {
 		if (err == -ENOSPC) {
 			pr_err("%s: too many PPS sources in the system\n",
@@ -449,7 +449,7 @@ EXPORT_SYMBOL(pps_lookup_dev);
 static void __exit pps_exit(void)
 {
 	class_destroy(pps_class);
-	unregister_chrdev_region(pps_devt, PPS_MAX_SOURCES);
+	unregister_chrdev_region(pps_devt, MINORMASK);
 }
 
 static int __init pps_init(void)
@@ -463,7 +463,7 @@ static int __init pps_init(void)
 	}
 	pps_class->dev_groups = pps_groups;
 
-	err = alloc_chrdev_region(&pps_devt, 0, PPS_MAX_SOURCES, "pps");
+	err = alloc_chrdev_region(&pps_devt, 0, MINORMASK, "pps");
 	if (err < 0) {
 		pr_err("failed to allocate char device region\n");
 		goto remove_class;
diff --git a/include/uapi/linux/pps.h b/include/uapi/linux/pps.h
index 90f2e86020ba..8a4096f18af1 100644
--- a/include/uapi/linux/pps.h
+++ b/include/uapi/linux/pps.h
@@ -26,7 +26,6 @@
 #include <linux/types.h>
 
 #define PPS_VERSION		"5.3.6"
-#define PPS_MAX_SOURCES		MINORMASK
 
 /* Implementation note: the logical states ``assert'' and ``clear''
  * are implemented in terms of the chip register, i.e. ``assert''
-- 
2.34.1


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

* Re: [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define
  2023-06-30  7:18 ` [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define Rodolfo Giometti
@ 2023-06-30  7:31   ` Greg Kroah-Hartman
  2023-06-30  7:50     ` Rodolfo Giometti
  0 siblings, 1 reply; 12+ messages in thread
From: Greg Kroah-Hartman @ 2023-06-30  7:31 UTC (permalink / raw
  To: Rodolfo Giometti; +Cc: linux-kernel

On Fri, Jun 30, 2023 at 09:18:26AM +0200, Rodolfo Giometti wrote:
> Userspace PPS clients should not known about how many PPS sources can
> be defined within the system (nor the rfc2783 say so), so we can
> safely drop this define since is not used anymore in the kernel too.
> 
> Signed-off-by: Rodolfo Giometti <giometti@enneenne.com>
> ---
>  drivers/pps/pps.c        | 6 +++---
>  include/uapi/linux/pps.h | 1 -
>  2 files changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
> index 5d19baae6a38..1a6131608036 100644
> --- a/drivers/pps/pps.c
> +++ b/drivers/pps/pps.c
> @@ -354,7 +354,7 @@ int pps_register_cdev(struct pps_device *pps)
>  	 * Get new ID for the new PPS source.  After idr_alloc() calling
>  	 * the new source will be freely available into the kernel.
>  	 */
> -	err = idr_alloc(&pps_idr, pps, 0, PPS_MAX_SOURCES, GFP_KERNEL);
> +	err = idr_alloc(&pps_idr, pps, 0, MINORMASK, GFP_KERNEL);
>  	if (err < 0) {
>  		if (err == -ENOSPC) {
>  			pr_err("%s: too many PPS sources in the system\n",
> @@ -449,7 +449,7 @@ EXPORT_SYMBOL(pps_lookup_dev);
>  static void __exit pps_exit(void)
>  {
>  	class_destroy(pps_class);
> -	unregister_chrdev_region(pps_devt, PPS_MAX_SOURCES);
> +	unregister_chrdev_region(pps_devt, MINORMASK);
>  }
>  
>  static int __init pps_init(void)
> @@ -463,7 +463,7 @@ static int __init pps_init(void)
>  	}
>  	pps_class->dev_groups = pps_groups;
>  
> -	err = alloc_chrdev_region(&pps_devt, 0, PPS_MAX_SOURCES, "pps");
> +	err = alloc_chrdev_region(&pps_devt, 0, MINORMASK, "pps");
>  	if (err < 0) {
>  		pr_err("failed to allocate char device region\n");
>  		goto remove_class;
> diff --git a/include/uapi/linux/pps.h b/include/uapi/linux/pps.h
> index 90f2e86020ba..8a4096f18af1 100644
> --- a/include/uapi/linux/pps.h
> +++ b/include/uapi/linux/pps.h
> @@ -26,7 +26,6 @@
>  #include <linux/types.h>
>  
>  #define PPS_VERSION		"5.3.6"
> -#define PPS_MAX_SOURCES		MINORMASK

Why change this in patch 1, and then delete this here?

That makes no sense.

And if this is exported to userspace, removing it should break things,
right?  If not, why was it there in the first place?

thanks,

greg k-h

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

* Re: [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define
  2023-06-30  7:31   ` Greg Kroah-Hartman
@ 2023-06-30  7:50     ` Rodolfo Giometti
  2023-06-30 12:53       ` Greg Kroah-Hartman
  0 siblings, 1 reply; 12+ messages in thread
From: Rodolfo Giometti @ 2023-06-30  7:50 UTC (permalink / raw
  To: Greg Kroah-Hartman; +Cc: linux-kernel

On 30/06/23 09:31, Greg Kroah-Hartman wrote:
> On Fri, Jun 30, 2023 at 09:18:26AM +0200, Rodolfo Giometti wrote:
>> Userspace PPS clients should not known about how many PPS sources can
>> be defined within the system (nor the rfc2783 say so), so we can
>> safely drop this define since is not used anymore in the kernel too.
>>
>> Signed-off-by: Rodolfo Giometti <giometti@enneenne.com>
>> ---
>>   drivers/pps/pps.c        | 6 +++---
>>   include/uapi/linux/pps.h | 1 -
>>   2 files changed, 3 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
>> index 5d19baae6a38..1a6131608036 100644
>> --- a/drivers/pps/pps.c
>> +++ b/drivers/pps/pps.c
>> @@ -354,7 +354,7 @@ int pps_register_cdev(struct pps_device *pps)
>>   	 * Get new ID for the new PPS source.  After idr_alloc() calling
>>   	 * the new source will be freely available into the kernel.
>>   	 */
>> -	err = idr_alloc(&pps_idr, pps, 0, PPS_MAX_SOURCES, GFP_KERNEL);
>> +	err = idr_alloc(&pps_idr, pps, 0, MINORMASK, GFP_KERNEL);
>>   	if (err < 0) {
>>   		if (err == -ENOSPC) {
>>   			pr_err("%s: too many PPS sources in the system\n",
>> @@ -449,7 +449,7 @@ EXPORT_SYMBOL(pps_lookup_dev);
>>   static void __exit pps_exit(void)
>>   {
>>   	class_destroy(pps_class);
>> -	unregister_chrdev_region(pps_devt, PPS_MAX_SOURCES);
>> +	unregister_chrdev_region(pps_devt, MINORMASK);
>>   }
>>   
>>   static int __init pps_init(void)
>> @@ -463,7 +463,7 @@ static int __init pps_init(void)
>>   	}
>>   	pps_class->dev_groups = pps_groups;
>>   
>> -	err = alloc_chrdev_region(&pps_devt, 0, PPS_MAX_SOURCES, "pps");
>> +	err = alloc_chrdev_region(&pps_devt, 0, MINORMASK, "pps");
>>   	if (err < 0) {
>>   		pr_err("failed to allocate char device region\n");
>>   		goto remove_class;
>> diff --git a/include/uapi/linux/pps.h b/include/uapi/linux/pps.h
>> index 90f2e86020ba..8a4096f18af1 100644
>> --- a/include/uapi/linux/pps.h
>> +++ b/include/uapi/linux/pps.h
>> @@ -26,7 +26,6 @@
>>   #include <linux/types.h>
>>   
>>   #define PPS_VERSION		"5.3.6"
>> -#define PPS_MAX_SOURCES		MINORMASK
> 
> Why change this in patch 1, and then delete this here?
> 
> That makes no sense.

I did it in two steps to be clear that the first step is about a better 
redefinition of the PPS_MAX_SOURCES define, while the second step is about the 
fact it's now that define is useless.

> And if this is exported to userspace, removing it should break things,
> right?  If not, why was it there in the first place?

In reality such define is not stated within the PPS RFC2783, so userspace 
programs whose relies on such define are broken.

Ciao,

Rodolfo

-- 
GNU/Linux Solutions                  e-mail: giometti@enneenne.com
Linux Device Driver                          giometti@linux.it
Embedded Systems                     phone:  +39 349 2432127
UNIX programming                     skype:  rodolfo.giometti


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

* Re: [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define
  2023-06-30  7:50     ` Rodolfo Giometti
@ 2023-06-30 12:53       ` Greg Kroah-Hartman
  2023-06-30 13:29         ` Rodolfo Giometti
  0 siblings, 1 reply; 12+ messages in thread
From: Greg Kroah-Hartman @ 2023-06-30 12:53 UTC (permalink / raw
  To: Rodolfo Giometti; +Cc: linux-kernel

On Fri, Jun 30, 2023 at 09:50:33AM +0200, Rodolfo Giometti wrote:
> On 30/06/23 09:31, Greg Kroah-Hartman wrote:
> > On Fri, Jun 30, 2023 at 09:18:26AM +0200, Rodolfo Giometti wrote:
> > > Userspace PPS clients should not known about how many PPS sources can
> > > be defined within the system (nor the rfc2783 say so), so we can
> > > safely drop this define since is not used anymore in the kernel too.
> > > 
> > > Signed-off-by: Rodolfo Giometti <giometti@enneenne.com>
> > > ---
> > >   drivers/pps/pps.c        | 6 +++---
> > >   include/uapi/linux/pps.h | 1 -
> > >   2 files changed, 3 insertions(+), 4 deletions(-)
> > > 
> > > diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
> > > index 5d19baae6a38..1a6131608036 100644
> > > --- a/drivers/pps/pps.c
> > > +++ b/drivers/pps/pps.c
> > > @@ -354,7 +354,7 @@ int pps_register_cdev(struct pps_device *pps)
> > >   	 * Get new ID for the new PPS source.  After idr_alloc() calling
> > >   	 * the new source will be freely available into the kernel.
> > >   	 */
> > > -	err = idr_alloc(&pps_idr, pps, 0, PPS_MAX_SOURCES, GFP_KERNEL);
> > > +	err = idr_alloc(&pps_idr, pps, 0, MINORMASK, GFP_KERNEL);
> > >   	if (err < 0) {
> > >   		if (err == -ENOSPC) {
> > >   			pr_err("%s: too many PPS sources in the system\n",
> > > @@ -449,7 +449,7 @@ EXPORT_SYMBOL(pps_lookup_dev);
> > >   static void __exit pps_exit(void)
> > >   {
> > >   	class_destroy(pps_class);
> > > -	unregister_chrdev_region(pps_devt, PPS_MAX_SOURCES);
> > > +	unregister_chrdev_region(pps_devt, MINORMASK);
> > >   }
> > >   static int __init pps_init(void)
> > > @@ -463,7 +463,7 @@ static int __init pps_init(void)
> > >   	}
> > >   	pps_class->dev_groups = pps_groups;
> > > -	err = alloc_chrdev_region(&pps_devt, 0, PPS_MAX_SOURCES, "pps");
> > > +	err = alloc_chrdev_region(&pps_devt, 0, MINORMASK, "pps");
> > >   	if (err < 0) {
> > >   		pr_err("failed to allocate char device region\n");
> > >   		goto remove_class;
> > > diff --git a/include/uapi/linux/pps.h b/include/uapi/linux/pps.h
> > > index 90f2e86020ba..8a4096f18af1 100644
> > > --- a/include/uapi/linux/pps.h
> > > +++ b/include/uapi/linux/pps.h
> > > @@ -26,7 +26,6 @@
> > >   #include <linux/types.h>
> > >   #define PPS_VERSION		"5.3.6"
> > > -#define PPS_MAX_SOURCES		MINORMASK
> > 
> > Why change this in patch 1, and then delete this here?
> > 
> > That makes no sense.
> 
> I did it in two steps to be clear that the first step is about a better
> redefinition of the PPS_MAX_SOURCES define, while the second step is about
> the fact it's now that define is useless.

Better to just convert everything in patch one, and then in patch 2
delete the .h #define.  That way, when userspace breaks, you can revert
just the last patch :)

> > And if this is exported to userspace, removing it should break things,
> > right?  If not, why was it there in the first place?
> 
> In reality such define is not stated within the PPS RFC2783, so userspace
> programs whose relies on such define are broken.

RFC's do not document Linux kernel apis.

So if any userspace code breaks, you have to put this back, sorry.

thanks,

greg k-h

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

* Re: [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define
  2023-06-30 12:53       ` Greg Kroah-Hartman
@ 2023-06-30 13:29         ` Rodolfo Giometti
  2023-07-03 13:38           ` Greg Kroah-Hartman
  0 siblings, 1 reply; 12+ messages in thread
From: Rodolfo Giometti @ 2023-06-30 13:29 UTC (permalink / raw
  To: Greg Kroah-Hartman; +Cc: linux-kernel

On 30/06/23 14:53, Greg Kroah-Hartman wrote:
> On Fri, Jun 30, 2023 at 09:50:33AM +0200, Rodolfo Giometti wrote:
>> On 30/06/23 09:31, Greg Kroah-Hartman wrote:
>>> On Fri, Jun 30, 2023 at 09:18:26AM +0200, Rodolfo Giometti wrote:
>>>> Userspace PPS clients should not known about how many PPS sources can
>>>> be defined within the system (nor the rfc2783 say so), so we can
>>>> safely drop this define since is not used anymore in the kernel too.
>>>>
>>>> Signed-off-by: Rodolfo Giometti <giometti@enneenne.com>
>>>> ---
>>>>    drivers/pps/pps.c        | 6 +++---
>>>>    include/uapi/linux/pps.h | 1 -
>>>>    2 files changed, 3 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
>>>> index 5d19baae6a38..1a6131608036 100644
>>>> --- a/drivers/pps/pps.c
>>>> +++ b/drivers/pps/pps.c
>>>> @@ -354,7 +354,7 @@ int pps_register_cdev(struct pps_device *pps)
>>>>    	 * Get new ID for the new PPS source.  After idr_alloc() calling
>>>>    	 * the new source will be freely available into the kernel.
>>>>    	 */
>>>> -	err = idr_alloc(&pps_idr, pps, 0, PPS_MAX_SOURCES, GFP_KERNEL);
>>>> +	err = idr_alloc(&pps_idr, pps, 0, MINORMASK, GFP_KERNEL);
>>>>    	if (err < 0) {
>>>>    		if (err == -ENOSPC) {
>>>>    			pr_err("%s: too many PPS sources in the system\n",
>>>> @@ -449,7 +449,7 @@ EXPORT_SYMBOL(pps_lookup_dev);
>>>>    static void __exit pps_exit(void)
>>>>    {
>>>>    	class_destroy(pps_class);
>>>> -	unregister_chrdev_region(pps_devt, PPS_MAX_SOURCES);
>>>> +	unregister_chrdev_region(pps_devt, MINORMASK);
>>>>    }
>>>>    static int __init pps_init(void)
>>>> @@ -463,7 +463,7 @@ static int __init pps_init(void)
>>>>    	}
>>>>    	pps_class->dev_groups = pps_groups;
>>>> -	err = alloc_chrdev_region(&pps_devt, 0, PPS_MAX_SOURCES, "pps");
>>>> +	err = alloc_chrdev_region(&pps_devt, 0, MINORMASK, "pps");
>>>>    	if (err < 0) {
>>>>    		pr_err("failed to allocate char device region\n");
>>>>    		goto remove_class;
>>>> diff --git a/include/uapi/linux/pps.h b/include/uapi/linux/pps.h
>>>> index 90f2e86020ba..8a4096f18af1 100644
>>>> --- a/include/uapi/linux/pps.h
>>>> +++ b/include/uapi/linux/pps.h
>>>> @@ -26,7 +26,6 @@
>>>>    #include <linux/types.h>
>>>>    #define PPS_VERSION		"5.3.6"
>>>> -#define PPS_MAX_SOURCES		MINORMASK
>>>
>>> Why change this in patch 1, and then delete this here?
>>>
>>> That makes no sense.
>>
>> I did it in two steps to be clear that the first step is about a better
>> redefinition of the PPS_MAX_SOURCES define, while the second step is about
>> the fact it's now that define is useless.
> 
> Better to just convert everything in patch one, and then in patch 2
> delete the .h #define.  That way, when userspace breaks, you can revert
> just the last patch :)

I'm puzzled since I did as you say... patch 1/2 increases PPS_MAX_SOURCES value 
while patch 2/2 drops PPS_MAX_SOURCES define.

>>> And if this is exported to userspace, removing it should break things,
>>> right?  If not, why was it there in the first place?
>>
>> In reality such define is not stated within the PPS RFC2783, so userspace
>> programs whose relies on such define are broken.
> 
> RFC's do not document Linux kernel apis.

It's true, but well written PPS clients should relay only on PPS API which in 
turn doesn't states that define. :P

> So if any userspace code breaks, you have to put this back, sorry.

If you think that patch 2 is not good, no problem, just drop it, but please just 
consider applying patch 1, since increasing PPS_MAX_SOURCES value is good.

Ciao,

Rodolfo

-- 
GNU/Linux Solutions                  e-mail: giometti@enneenne.com
Linux Device Driver                          giometti@linux.it
Embedded Systems                     phone:  +39 349 2432127
UNIX programming                     skype:  rodolfo.giometti


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

* Re: [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define
  2023-06-30 13:29         ` Rodolfo Giometti
@ 2023-07-03 13:38           ` Greg Kroah-Hartman
  2023-07-03 14:47             ` Rodolfo Giometti
  0 siblings, 1 reply; 12+ messages in thread
From: Greg Kroah-Hartman @ 2023-07-03 13:38 UTC (permalink / raw
  To: Rodolfo Giometti; +Cc: linux-kernel

On Fri, Jun 30, 2023 at 03:29:50PM +0200, Rodolfo Giometti wrote:
> On 30/06/23 14:53, Greg Kroah-Hartman wrote:
> > On Fri, Jun 30, 2023 at 09:50:33AM +0200, Rodolfo Giometti wrote:
> > > On 30/06/23 09:31, Greg Kroah-Hartman wrote:
> > > > On Fri, Jun 30, 2023 at 09:18:26AM +0200, Rodolfo Giometti wrote:
> > > > > Userspace PPS clients should not known about how many PPS sources can
> > > > > be defined within the system (nor the rfc2783 say so), so we can
> > > > > safely drop this define since is not used anymore in the kernel too.
> > > > > 
> > > > > Signed-off-by: Rodolfo Giometti <giometti@enneenne.com>
> > > > > ---
> > > > >    drivers/pps/pps.c        | 6 +++---
> > > > >    include/uapi/linux/pps.h | 1 -
> > > > >    2 files changed, 3 insertions(+), 4 deletions(-)
> > > > > 
> > > > > diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
> > > > > index 5d19baae6a38..1a6131608036 100644
> > > > > --- a/drivers/pps/pps.c
> > > > > +++ b/drivers/pps/pps.c
> > > > > @@ -354,7 +354,7 @@ int pps_register_cdev(struct pps_device *pps)
> > > > >    	 * Get new ID for the new PPS source.  After idr_alloc() calling
> > > > >    	 * the new source will be freely available into the kernel.
> > > > >    	 */
> > > > > -	err = idr_alloc(&pps_idr, pps, 0, PPS_MAX_SOURCES, GFP_KERNEL);
> > > > > +	err = idr_alloc(&pps_idr, pps, 0, MINORMASK, GFP_KERNEL);
> > > > >    	if (err < 0) {
> > > > >    		if (err == -ENOSPC) {
> > > > >    			pr_err("%s: too many PPS sources in the system\n",
> > > > > @@ -449,7 +449,7 @@ EXPORT_SYMBOL(pps_lookup_dev);
> > > > >    static void __exit pps_exit(void)
> > > > >    {
> > > > >    	class_destroy(pps_class);
> > > > > -	unregister_chrdev_region(pps_devt, PPS_MAX_SOURCES);
> > > > > +	unregister_chrdev_region(pps_devt, MINORMASK);
> > > > >    }
> > > > >    static int __init pps_init(void)
> > > > > @@ -463,7 +463,7 @@ static int __init pps_init(void)
> > > > >    	}
> > > > >    	pps_class->dev_groups = pps_groups;
> > > > > -	err = alloc_chrdev_region(&pps_devt, 0, PPS_MAX_SOURCES, "pps");
> > > > > +	err = alloc_chrdev_region(&pps_devt, 0, MINORMASK, "pps");
> > > > >    	if (err < 0) {
> > > > >    		pr_err("failed to allocate char device region\n");
> > > > >    		goto remove_class;
> > > > > diff --git a/include/uapi/linux/pps.h b/include/uapi/linux/pps.h
> > > > > index 90f2e86020ba..8a4096f18af1 100644
> > > > > --- a/include/uapi/linux/pps.h
> > > > > +++ b/include/uapi/linux/pps.h
> > > > > @@ -26,7 +26,6 @@
> > > > >    #include <linux/types.h>
> > > > >    #define PPS_VERSION		"5.3.6"
> > > > > -#define PPS_MAX_SOURCES		MINORMASK
> > > > 
> > > > Why change this in patch 1, and then delete this here?
> > > > 
> > > > That makes no sense.
> > > 
> > > I did it in two steps to be clear that the first step is about a better
> > > redefinition of the PPS_MAX_SOURCES define, while the second step is about
> > > the fact it's now that define is useless.
> > 
> > Better to just convert everything in patch one, and then in patch 2
> > delete the .h #define.  That way, when userspace breaks, you can revert
> > just the last patch :)
> 
> I'm puzzled since I did as you say... patch 1/2 increases PPS_MAX_SOURCES
> value while patch 2/2 drops PPS_MAX_SOURCES define.

Ah, I thought patch 1/2 renamed it.

But why increase it if you are removing it?

> > > > And if this is exported to userspace, removing it should break things,
> > > > right?  If not, why was it there in the first place?
> > > 
> > > In reality such define is not stated within the PPS RFC2783, so userspace
> > > programs whose relies on such define are broken.
> > 
> > RFC's do not document Linux kernel apis.
> 
> It's true, but well written PPS clients should relay only on PPS API which
> in turn doesn't states that define. :P

Are you sure?  Have you audited the clients?  if so, please document
that in the changelog text.

> > So if any userspace code breaks, you have to put this back, sorry.
> 
> If you think that patch 2 is not good, no problem, just drop it, but please
> just consider applying patch 1, since increasing PPS_MAX_SOURCES value is
> good.

You can't change a uapi value either without breaking things :(

thanks,

greg k-h

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

* Re: [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define
  2023-07-03 13:38           ` Greg Kroah-Hartman
@ 2023-07-03 14:47             ` Rodolfo Giometti
  2023-07-17 15:52               ` Charlie Johnston
  0 siblings, 1 reply; 12+ messages in thread
From: Rodolfo Giometti @ 2023-07-03 14:47 UTC (permalink / raw
  To: Greg Kroah-Hartman; +Cc: linux-kernel

On 03/07/23 15:38, Greg Kroah-Hartman wrote:
> On Fri, Jun 30, 2023 at 03:29:50PM +0200, Rodolfo Giometti wrote:
>> On 30/06/23 14:53, Greg Kroah-Hartman wrote:
>>> On Fri, Jun 30, 2023 at 09:50:33AM +0200, Rodolfo Giometti wrote:
>>>> On 30/06/23 09:31, Greg Kroah-Hartman wrote:
>>>>> On Fri, Jun 30, 2023 at 09:18:26AM +0200, Rodolfo Giometti wrote:
>>>>>> Userspace PPS clients should not known about how many PPS sources can
>>>>>> be defined within the system (nor the rfc2783 say so), so we can
>>>>>> safely drop this define since is not used anymore in the kernel too.
>>>>>>
>>>>>> Signed-off-by: Rodolfo Giometti <giometti@enneenne.com>
>>>>>> ---
>>>>>>     drivers/pps/pps.c        | 6 +++---
>>>>>>     include/uapi/linux/pps.h | 1 -
>>>>>>     2 files changed, 3 insertions(+), 4 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
>>>>>> index 5d19baae6a38..1a6131608036 100644
>>>>>> --- a/drivers/pps/pps.c
>>>>>> +++ b/drivers/pps/pps.c
>>>>>> @@ -354,7 +354,7 @@ int pps_register_cdev(struct pps_device *pps)
>>>>>>     	 * Get new ID for the new PPS source.  After idr_alloc() calling
>>>>>>     	 * the new source will be freely available into the kernel.
>>>>>>     	 */
>>>>>> -	err = idr_alloc(&pps_idr, pps, 0, PPS_MAX_SOURCES, GFP_KERNEL);
>>>>>> +	err = idr_alloc(&pps_idr, pps, 0, MINORMASK, GFP_KERNEL);
>>>>>>     	if (err < 0) {
>>>>>>     		if (err == -ENOSPC) {
>>>>>>     			pr_err("%s: too many PPS sources in the system\n",
>>>>>> @@ -449,7 +449,7 @@ EXPORT_SYMBOL(pps_lookup_dev);
>>>>>>     static void __exit pps_exit(void)
>>>>>>     {
>>>>>>     	class_destroy(pps_class);
>>>>>> -	unregister_chrdev_region(pps_devt, PPS_MAX_SOURCES);
>>>>>> +	unregister_chrdev_region(pps_devt, MINORMASK);
>>>>>>     }
>>>>>>     static int __init pps_init(void)
>>>>>> @@ -463,7 +463,7 @@ static int __init pps_init(void)
>>>>>>     	}
>>>>>>     	pps_class->dev_groups = pps_groups;
>>>>>> -	err = alloc_chrdev_region(&pps_devt, 0, PPS_MAX_SOURCES, "pps");
>>>>>> +	err = alloc_chrdev_region(&pps_devt, 0, MINORMASK, "pps");
>>>>>>     	if (err < 0) {
>>>>>>     		pr_err("failed to allocate char device region\n");
>>>>>>     		goto remove_class;
>>>>>> diff --git a/include/uapi/linux/pps.h b/include/uapi/linux/pps.h
>>>>>> index 90f2e86020ba..8a4096f18af1 100644
>>>>>> --- a/include/uapi/linux/pps.h
>>>>>> +++ b/include/uapi/linux/pps.h
>>>>>> @@ -26,7 +26,6 @@
>>>>>>     #include <linux/types.h>
>>>>>>     #define PPS_VERSION		"5.3.6"
>>>>>> -#define PPS_MAX_SOURCES		MINORMASK
>>>>>
>>>>> Why change this in patch 1, and then delete this here?
>>>>>
>>>>> That makes no sense.
>>>>
>>>> I did it in two steps to be clear that the first step is about a better
>>>> redefinition of the PPS_MAX_SOURCES define, while the second step is about
>>>> the fact it's now that define is useless.
>>>
>>> Better to just convert everything in patch one, and then in patch 2
>>> delete the .h #define.  That way, when userspace breaks, you can revert
>>> just the last patch :)
>>
>> I'm puzzled since I did as you say... patch 1/2 increases PPS_MAX_SOURCES
>> value while patch 2/2 drops PPS_MAX_SOURCES define.
> 
> Ah, I thought patch 1/2 renamed it.

No, patch 1/2 just safely increases PPS_MAX_SOURCES value as other drivers does.

> But why increase it if you are removing it?

As I said I splitted the modification in two steps just to highlight that the 
first step is a better redefinition of PPS_MAX_SOURCES, while the second step 
drops it since it's useless for userspace. As you noticed this last step is not 
trivial since it may breaks some userspace programs, but it's also true that 
RFC2783 doesn't define it, so well written userspace programs should not use 
that define and then they should not break at all. :)

>>>>> And if this is exported to userspace, removing it should break things,
>>>>> right?  If not, why was it there in the first place?
>>>>
>>>> In reality such define is not stated within the PPS RFC2783, so userspace
>>>> programs whose relies on such define are broken.
>>>
>>> RFC's do not document Linux kernel apis.
>>
>> It's true, but well written PPS clients should relay only on PPS API which
>> in turn doesn't states that define. :P
> 
> Are you sure?  Have you audited the clients?  if so, please document
> that in the changelog text.

OK, I'm going to re-write the changelog text adding this information.

>>> So if any userspace code breaks, you have to put this back, sorry.
>>
>> If you think that patch 2 is not good, no problem, just drop it, but please
>> just consider applying patch 1, since increasing PPS_MAX_SOURCES value is
>> good.
> 
> You can't change a uapi value either without breaking things :(

I see, but in this case what do you suggest to do? Keeping 1/2 and dropping 2/2?

Ciao,

Rodolfo

-- 
GNU/Linux Solutions                  e-mail: giometti@enneenne.com
Linux Device Driver                          giometti@linux.it
Embedded Systems                     phone:  +39 349 2432127
UNIX programming                     skype:  rodolfo.giometti


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

* Re: [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define
  2023-07-03 14:47             ` Rodolfo Giometti
@ 2023-07-17 15:52               ` Charlie Johnston
  2023-07-18  7:47                 ` Rodolfo Giometti
  0 siblings, 1 reply; 12+ messages in thread
From: Charlie Johnston @ 2023-07-17 15:52 UTC (permalink / raw
  To: Rodolfo Giometti, Greg Kroah-Hartman; +Cc: linux-kernel

On 7/3/23 09:47, Rodolfo Giometti wrote:
> On 03/07/23 15:38, Greg Kroah-Hartman wrote:
>> On Fri, Jun 30, 2023 at 03:29:50PM +0200, Rodolfo Giometti wrote:
>>> On 30/06/23 14:53, Greg Kroah-Hartman wrote:
>>>> On Fri, Jun 30, 2023 at 09:50:33AM +0200, Rodolfo Giometti wrote:
>>>>> On 30/06/23 09:31, Greg Kroah-Hartman wrote:
>>>>>> On Fri, Jun 30, 2023 at 09:18:26AM +0200, Rodolfo Giometti wrote:
>>>>>>> Userspace PPS clients should not known about how many PPS sources can
>>>>>>> be defined within the system (nor the rfc2783 say so), so we can
>>>>>>> safely drop this define since is not used anymore in the kernel too.
>>>>>>>
>>>>>>> Signed-off-by: Rodolfo Giometti <giometti@enneenne.com>
>>>>>>> ---
>>>>>>>     drivers/pps/pps.c        | 6 +++---
>>>>>>>     include/uapi/linux/pps.h | 1 -
>>>>>>>     2 files changed, 3 insertions(+), 4 deletions(-)
>>>>>>>
>>>>>>> diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
>>>>>>> index 5d19baae6a38..1a6131608036 100644
>>>>>>> --- a/drivers/pps/pps.c
>>>>>>> +++ b/drivers/pps/pps.c
>>>>>>> @@ -354,7 +354,7 @@ int pps_register_cdev(struct pps_device *pps)
>>>>>>>          * Get new ID for the new PPS source.  After idr_alloc() calling
>>>>>>>          * the new source will be freely available into the kernel.
>>>>>>>          */
>>>>>>> -    err = idr_alloc(&pps_idr, pps, 0, PPS_MAX_SOURCES, GFP_KERNEL);
>>>>>>> +    err = idr_alloc(&pps_idr, pps, 0, MINORMASK, GFP_KERNEL);
>>>>>>>         if (err < 0) {
>>>>>>>             if (err == -ENOSPC) {
>>>>>>>                 pr_err("%s: too many PPS sources in the system\n",
>>>>>>> @@ -449,7 +449,7 @@ EXPORT_SYMBOL(pps_lookup_dev);
>>>>>>>     static void __exit pps_exit(void)
>>>>>>>     {
>>>>>>>         class_destroy(pps_class);
>>>>>>> -    unregister_chrdev_region(pps_devt, PPS_MAX_SOURCES);
>>>>>>> +    unregister_chrdev_region(pps_devt, MINORMASK);
>>>>>>>     }
>>>>>>>     static int __init pps_init(void)
>>>>>>> @@ -463,7 +463,7 @@ static int __init pps_init(void)
>>>>>>>         }
>>>>>>>         pps_class->dev_groups = pps_groups;
>>>>>>> -    err = alloc_chrdev_region(&pps_devt, 0, PPS_MAX_SOURCES, "pps");
>>>>>>> +    err = alloc_chrdev_region(&pps_devt, 0, MINORMASK, "pps");
>>>>>>>         if (err < 0) {
>>>>>>>             pr_err("failed to allocate char device region\n");
>>>>>>>             goto remove_class;
>>>>>>> diff --git a/include/uapi/linux/pps.h b/include/uapi/linux/pps.h
>>>>>>> index 90f2e86020ba..8a4096f18af1 100644
>>>>>>> --- a/include/uapi/linux/pps.h
>>>>>>> +++ b/include/uapi/linux/pps.h
>>>>>>> @@ -26,7 +26,6 @@
>>>>>>>     #include <linux/types.h>
>>>>>>>     #define PPS_VERSION        "5.3.6"
>>>>>>> -#define PPS_MAX_SOURCES        MINORMASK
>>>>>>
>>>>>> Why change this in patch 1, and then delete this here?
>>>>>>
>>>>>> That makes no sense.
>>>>>
>>>>> I did it in two steps to be clear that the first step is about a better
>>>>> redefinition of the PPS_MAX_SOURCES define, while the second step is about
>>>>> the fact it's now that define is useless.
>>>>
>>>> Better to just convert everything in patch one, and then in patch 2
>>>> delete the .h #define.  That way, when userspace breaks, you can revert
>>>> just the last patch :)
>>>
>>> I'm puzzled since I did as you say... patch 1/2 increases PPS_MAX_SOURCES
>>> value while patch 2/2 drops PPS_MAX_SOURCES define.
>>
>> Ah, I thought patch 1/2 renamed it.
> 
> No, patch 1/2 just safely increases PPS_MAX_SOURCES value as other drivers does.
> 
>> But why increase it if you are removing it?
> 
> As I said I splitted the modification in two steps just to highlight that the first step is a better redefinition of PPS_MAX_SOURCES, while the second step drops it since it's useless for userspace. As you noticed this last step is not trivial since it may breaks some userspace programs, but it's also true that RFC2783 doesn't define it, so well written userspace programs should not use that define and then they should not break at all. :)
> 
>>>>>> And if this is exported to userspace, removing it should break things,
>>>>>> right?  If not, why was it there in the first place?
>>>>>
>>>>> In reality such define is not stated within the PPS RFC2783, so userspace
>>>>> programs whose relies on such define are broken.
>>>>
>>>> RFC's do not document Linux kernel apis.
>>>
>>> It's true, but well written PPS clients should relay only on PPS API which
>>> in turn doesn't states that define. :P
>>
>> Are you sure?  Have you audited the clients?  if so, please document
>> that in the changelog text.
> 
> OK, I'm going to re-write the changelog text adding this information.
> 
>>>> So if any userspace code breaks, you have to put this back, sorry.
>>>
>>> If you think that patch 2 is not good, no problem, just drop it, but please
>>> just consider applying patch 1, since increasing PPS_MAX_SOURCES value is
>>> good.
>>
>> You can't change a uapi value either without breaking things :(
> 
> I see, but in this case what do you suggest to do? Keeping 1/2 and dropping 2/2?

I'm confused here. Is the problem just that the uapi value cannot be dropped (since it is part of uapi) and only patch 1 can be applied?
Or is it that the uapi value cannot be dropped OR changed so neither patch can be applied? If the latter, how would one go about raising a value like this to allow a higher limit without causing issues for existing uapi users?

Regards,
Charlie Johnston

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

* Re: [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define
  2023-07-17 15:52               ` Charlie Johnston
@ 2023-07-18  7:47                 ` Rodolfo Giometti
  2023-08-08 17:58                   ` Charlie Johnston
  0 siblings, 1 reply; 12+ messages in thread
From: Rodolfo Giometti @ 2023-07-18  7:47 UTC (permalink / raw
  To: Charlie Johnston; +Cc: linux-kernel, Greg Kroah-Hartman

On 17/07/23 17:52, Charlie Johnston wrote:
> On 7/3/23 09:47, Rodolfo Giometti wrote:
>> On 03/07/23 15:38, Greg Kroah-Hartman wrote:
>>> On Fri, Jun 30, 2023 at 03:29:50PM +0200, Rodolfo Giometti wrote:
>>>> On 30/06/23 14:53, Greg Kroah-Hartman wrote:
>>>>> On Fri, Jun 30, 2023 at 09:50:33AM +0200, Rodolfo Giometti wrote:
>>>>>> On 30/06/23 09:31, Greg Kroah-Hartman wrote:
>>>>>>> On Fri, Jun 30, 2023 at 09:18:26AM +0200, Rodolfo Giometti wrote:
>>>>>>>> Userspace PPS clients should not known about how many PPS sources can
>>>>>>>> be defined within the system (nor the rfc2783 say so), so we can
>>>>>>>> safely drop this define since is not used anymore in the kernel too.
>>>>>>>>
>>>>>>>> Signed-off-by: Rodolfo Giometti <giometti@enneenne.com>
>>>>>>>> ---
>>>>>>>>      drivers/pps/pps.c        | 6 +++---
>>>>>>>>      include/uapi/linux/pps.h | 1 -
>>>>>>>>      2 files changed, 3 insertions(+), 4 deletions(-)
>>>>>>>>
>>>>>>>> diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
>>>>>>>> index 5d19baae6a38..1a6131608036 100644
>>>>>>>> --- a/drivers/pps/pps.c
>>>>>>>> +++ b/drivers/pps/pps.c
>>>>>>>> @@ -354,7 +354,7 @@ int pps_register_cdev(struct pps_device *pps)
>>>>>>>>           * Get new ID for the new PPS source.  After idr_alloc() calling
>>>>>>>>           * the new source will be freely available into the kernel.
>>>>>>>>           */
>>>>>>>> -    err = idr_alloc(&pps_idr, pps, 0, PPS_MAX_SOURCES, GFP_KERNEL);
>>>>>>>> +    err = idr_alloc(&pps_idr, pps, 0, MINORMASK, GFP_KERNEL);
>>>>>>>>          if (err < 0) {
>>>>>>>>              if (err == -ENOSPC) {
>>>>>>>>                  pr_err("%s: too many PPS sources in the system\n",
>>>>>>>> @@ -449,7 +449,7 @@ EXPORT_SYMBOL(pps_lookup_dev);
>>>>>>>>      static void __exit pps_exit(void)
>>>>>>>>      {
>>>>>>>>          class_destroy(pps_class);
>>>>>>>> -    unregister_chrdev_region(pps_devt, PPS_MAX_SOURCES);
>>>>>>>> +    unregister_chrdev_region(pps_devt, MINORMASK);
>>>>>>>>      }
>>>>>>>>      static int __init pps_init(void)
>>>>>>>> @@ -463,7 +463,7 @@ static int __init pps_init(void)
>>>>>>>>          }
>>>>>>>>          pps_class->dev_groups = pps_groups;
>>>>>>>> -    err = alloc_chrdev_region(&pps_devt, 0, PPS_MAX_SOURCES, "pps");
>>>>>>>> +    err = alloc_chrdev_region(&pps_devt, 0, MINORMASK, "pps");
>>>>>>>>          if (err < 0) {
>>>>>>>>              pr_err("failed to allocate char device region\n");
>>>>>>>>              goto remove_class;
>>>>>>>> diff --git a/include/uapi/linux/pps.h b/include/uapi/linux/pps.h
>>>>>>>> index 90f2e86020ba..8a4096f18af1 100644
>>>>>>>> --- a/include/uapi/linux/pps.h
>>>>>>>> +++ b/include/uapi/linux/pps.h
>>>>>>>> @@ -26,7 +26,6 @@
>>>>>>>>      #include <linux/types.h>
>>>>>>>>      #define PPS_VERSION        "5.3.6"
>>>>>>>> -#define PPS_MAX_SOURCES        MINORMASK
>>>>>>>
>>>>>>> Why change this in patch 1, and then delete this here?
>>>>>>>
>>>>>>> That makes no sense.
>>>>>>
>>>>>> I did it in two steps to be clear that the first step is about a better
>>>>>> redefinition of the PPS_MAX_SOURCES define, while the second step is about
>>>>>> the fact it's now that define is useless.
>>>>>
>>>>> Better to just convert everything in patch one, and then in patch 2
>>>>> delete the .h #define.  That way, when userspace breaks, you can revert
>>>>> just the last patch :)
>>>>
>>>> I'm puzzled since I did as you say... patch 1/2 increases PPS_MAX_SOURCES
>>>> value while patch 2/2 drops PPS_MAX_SOURCES define.
>>>
>>> Ah, I thought patch 1/2 renamed it.
>>
>> No, patch 1/2 just safely increases PPS_MAX_SOURCES value as other drivers does.
>>
>>> But why increase it if you are removing it?
>>
>> As I said I splitted the modification in two steps just to highlight that the first step is a better redefinition of PPS_MAX_SOURCES, while the second step drops it since it's useless for userspace. As you noticed this last step is not trivial since it may breaks some userspace programs, but it's also true that RFC2783 doesn't define it, so well written userspace programs should not use that define and then they should not break at all. :)
>>
>>>>>>> And if this is exported to userspace, removing it should break things,
>>>>>>> right?  If not, why was it there in the first place?
>>>>>>
>>>>>> In reality such define is not stated within the PPS RFC2783, so userspace
>>>>>> programs whose relies on such define are broken.
>>>>>
>>>>> RFC's do not document Linux kernel apis.
>>>>
>>>> It's true, but well written PPS clients should relay only on PPS API which
>>>> in turn doesn't states that define. :P
>>>
>>> Are you sure?  Have you audited the clients?  if so, please document
>>> that in the changelog text.
>>
>> OK, I'm going to re-write the changelog text adding this information.
>>
>>>>> So if any userspace code breaks, you have to put this back, sorry.
>>>>
>>>> If you think that patch 2 is not good, no problem, just drop it, but please
>>>> just consider applying patch 1, since increasing PPS_MAX_SOURCES value is
>>>> good.
>>>
>>> You can't change a uapi value either without breaking things :(
>>
>> I see, but in this case what do you suggest to do? Keeping 1/2 and dropping 2/2?
> 
> I'm confused here. Is the problem just that the uapi value cannot be dropped (since it is part of uapi) and only patch 1 can be applied?

Yes.

> Or is it that the uapi value cannot be dropped OR changed so neither patch can be applied?

No.

> If the latter, how would one go about raising a value like this to allow a higher limit without causing issues for existing uapi users?

My opinion is that both patches should be applied since, the first one just 
increases the value of possible PPS sources, while the second just drops a 
define that userspace tools should NOT use since RFC 2783 - Pulse-Per-Second API 
for UNIX-like Operating Systems doesn't define it.

Is some userspace tool breaks, it should be fixed.

Ciao,

Rodolfo

-- 
GNU/Linux Solutions                  e-mail: giometti@enneenne.com
Linux Device Driver                          giometti@linux.it
Embedded Systems                     phone:  +39 349 2432127
UNIX programming                     skype:  rodolfo.giometti


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

* Re: [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define
  2023-07-18  7:47                 ` Rodolfo Giometti
@ 2023-08-08 17:58                   ` Charlie Johnston
  2023-08-09  7:12                     ` Rodolfo Giometti
  0 siblings, 1 reply; 12+ messages in thread
From: Charlie Johnston @ 2023-08-08 17:58 UTC (permalink / raw
  To: Rodolfo Giometti; +Cc: linux-kernel, Greg Kroah-Hartman

On 7/18/23 02:47, Rodolfo Giometti wrote:
> On 17/07/23 17:52, Charlie Johnston wrote:
>> On 7/3/23 09:47, Rodolfo Giometti wrote:
>>> On 03/07/23 15:38, Greg Kroah-Hartman wrote:
>>>> On Fri, Jun 30, 2023 at 03:29:50PM +0200, Rodolfo Giometti wrote:
>>>>> On 30/06/23 14:53, Greg Kroah-Hartman wrote:
>>>>>> On Fri, Jun 30, 2023 at 09:50:33AM +0200, Rodolfo Giometti wrote:
>>>>>>> On 30/06/23 09:31, Greg Kroah-Hartman wrote:
>>>>>>>> On Fri, Jun 30, 2023 at 09:18:26AM +0200, Rodolfo Giometti wrote:
>>>>>>>>> Userspace PPS clients should not known about how many PPS sources can
>>>>>>>>> be defined within the system (nor the rfc2783 say so), so we can
>>>>>>>>> safely drop this define since is not used anymore in the kernel too.
>>>>>>>>>
>>>>>>>>> Signed-off-by: Rodolfo Giometti <giometti@enneenne.com>
>>>>>>>>> ---
>>>>>>>>>      drivers/pps/pps.c        | 6 +++---
>>>>>>>>>      include/uapi/linux/pps.h | 1 -
>>>>>>>>>      2 files changed, 3 insertions(+), 4 deletions(-)
>>>>>>>>>
>>>>>>>>> diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
>>>>>>>>> index 5d19baae6a38..1a6131608036 100644
>>>>>>>>> --- a/drivers/pps/pps.c
>>>>>>>>> +++ b/drivers/pps/pps.c
>>>>>>>>> @@ -354,7 +354,7 @@ int pps_register_cdev(struct pps_device *pps)
>>>>>>>>>           * Get new ID for the new PPS source.  After idr_alloc() calling
>>>>>>>>>           * the new source will be freely available into the kernel.
>>>>>>>>>           */
>>>>>>>>> -    err = idr_alloc(&pps_idr, pps, 0, PPS_MAX_SOURCES, GFP_KERNEL);
>>>>>>>>> +    err = idr_alloc(&pps_idr, pps, 0, MINORMASK, GFP_KERNEL);
>>>>>>>>>          if (err < 0) {
>>>>>>>>>              if (err == -ENOSPC) {
>>>>>>>>>                  pr_err("%s: too many PPS sources in the system\n",
>>>>>>>>> @@ -449,7 +449,7 @@ EXPORT_SYMBOL(pps_lookup_dev);
>>>>>>>>>      static void __exit pps_exit(void)
>>>>>>>>>      {
>>>>>>>>>          class_destroy(pps_class);
>>>>>>>>> -    unregister_chrdev_region(pps_devt, PPS_MAX_SOURCES);
>>>>>>>>> +    unregister_chrdev_region(pps_devt, MINORMASK);
>>>>>>>>>      }
>>>>>>>>>      static int __init pps_init(void)
>>>>>>>>> @@ -463,7 +463,7 @@ static int __init pps_init(void)
>>>>>>>>>          }
>>>>>>>>>          pps_class->dev_groups = pps_groups;
>>>>>>>>> -    err = alloc_chrdev_region(&pps_devt, 0, PPS_MAX_SOURCES, "pps");
>>>>>>>>> +    err = alloc_chrdev_region(&pps_devt, 0, MINORMASK, "pps");
>>>>>>>>>          if (err < 0) {
>>>>>>>>>              pr_err("failed to allocate char device region\n");
>>>>>>>>>              goto remove_class;
>>>>>>>>> diff --git a/include/uapi/linux/pps.h b/include/uapi/linux/pps.h
>>>>>>>>> index 90f2e86020ba..8a4096f18af1 100644
>>>>>>>>> --- a/include/uapi/linux/pps.h
>>>>>>>>> +++ b/include/uapi/linux/pps.h
>>>>>>>>> @@ -26,7 +26,6 @@
>>>>>>>>>      #include <linux/types.h>
>>>>>>>>>      #define PPS_VERSION        "5.3.6"
>>>>>>>>> -#define PPS_MAX_SOURCES        MINORMASK
>>>>>>>>
>>>>>>>> Why change this in patch 1, and then delete this here?
>>>>>>>>
>>>>>>>> That makes no sense.
>>>>>>>
>>>>>>> I did it in two steps to be clear that the first step is about a better
>>>>>>> redefinition of the PPS_MAX_SOURCES define, while the second step is about
>>>>>>> the fact it's now that define is useless.
>>>>>>
>>>>>> Better to just convert everything in patch one, and then in patch 2
>>>>>> delete the .h #define.  That way, when userspace breaks, you can revert
>>>>>> just the last patch :)
>>>>>
>>>>> I'm puzzled since I did as you say... patch 1/2 increases PPS_MAX_SOURCES
>>>>> value while patch 2/2 drops PPS_MAX_SOURCES define.
>>>>
>>>> Ah, I thought patch 1/2 renamed it.
>>>
>>> No, patch 1/2 just safely increases PPS_MAX_SOURCES value as other drivers does.
>>>
>>>> But why increase it if you are removing it?
>>>
>>> As I said I splitted the modification in two steps just to highlight that the first step is a better redefinition of PPS_MAX_SOURCES, while the second step drops it since it's useless for userspace. As you noticed this last step is not trivial since it may breaks some userspace programs, but it's also true that RFC2783 doesn't define it, so well written userspace programs should not use that define and then they should not break at all. :)
>>>
>>>>>>>> And if this is exported to userspace, removing it should break things,
>>>>>>>> right?  If not, why was it there in the first place?
>>>>>>>
>>>>>>> In reality such define is not stated within the PPS RFC2783, so userspace
>>>>>>> programs whose relies on such define are broken.
>>>>>>
>>>>>> RFC's do not document Linux kernel apis.
>>>>>
>>>>> It's true, but well written PPS clients should relay only on PPS API which
>>>>> in turn doesn't states that define. :P
>>>>
>>>> Are you sure?  Have you audited the clients?  if so, please document
>>>> that in the changelog text.
>>>
>>> OK, I'm going to re-write the changelog text adding this information.
>>>
>>>>>> So if any userspace code breaks, you have to put this back, sorry.
>>>>>
>>>>> If you think that patch 2 is not good, no problem, just drop it, but please
>>>>> just consider applying patch 1, since increasing PPS_MAX_SOURCES value is
>>>>> good.
>>>>
>>>> You can't change a uapi value either without breaking things :(
>>>
>>> I see, but in this case what do you suggest to do? Keeping 1/2 and dropping 2/2?
>>
>> I'm confused here. Is the problem just that the uapi value cannot be dropped (since it is part of uapi) and only patch 1 can be applied?
> 
> Yes.
> 
>> Or is it that the uapi value cannot be dropped OR changed so neither patch can be applied?
> 
> No.
> 
>> If the latter, how would one go about raising a value like this to allow a higher limit without causing issues for existing uapi users?
> 
> My opinion is that both patches should be applied since, the first one just increases the value of possible PPS sources, while the second just drops a define that userspace tools should NOT use since RFC 2783 - Pulse-Per-Second API for UNIX-like Operating Systems doesn't define it.
> 
> Is some userspace tool breaks, it should be fixed.
> 
> Ciao,
> 
> Rodolfo
> 

Hi Rodolfo,

Is there any other testing or help I can provide for this patch set?

Thanks!
Charlie Johnston 

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

* Re: [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define
  2023-08-08 17:58                   ` Charlie Johnston
@ 2023-08-09  7:12                     ` Rodolfo Giometti
  0 siblings, 0 replies; 12+ messages in thread
From: Rodolfo Giometti @ 2023-08-09  7:12 UTC (permalink / raw
  To: Charlie Johnston; +Cc: linux-kernel, Greg Kroah-Hartman

On 08/08/23 19:58, Charlie Johnston wrote:
> On 7/18/23 02:47, Rodolfo Giometti wrote:
>> On 17/07/23 17:52, Charlie Johnston wrote:
>>> On 7/3/23 09:47, Rodolfo Giometti wrote:
>>>> On 03/07/23 15:38, Greg Kroah-Hartman wrote:
>>>>> On Fri, Jun 30, 2023 at 03:29:50PM +0200, Rodolfo Giometti wrote:
>>>>>> On 30/06/23 14:53, Greg Kroah-Hartman wrote:
>>>>>>> On Fri, Jun 30, 2023 at 09:50:33AM +0200, Rodolfo Giometti wrote:
>>>>>>>> On 30/06/23 09:31, Greg Kroah-Hartman wrote:
>>>>>>>>> On Fri, Jun 30, 2023 at 09:18:26AM +0200, Rodolfo Giometti wrote:
>>>>>>>>>> Userspace PPS clients should not known about how many PPS sources can
>>>>>>>>>> be defined within the system (nor the rfc2783 say so), so we can
>>>>>>>>>> safely drop this define since is not used anymore in the kernel too.
>>>>>>>>>>
>>>>>>>>>> Signed-off-by: Rodolfo Giometti <giometti@enneenne.com>
>>>>>>>>>> ---
>>>>>>>>>>       drivers/pps/pps.c        | 6 +++---
>>>>>>>>>>       include/uapi/linux/pps.h | 1 -
>>>>>>>>>>       2 files changed, 3 insertions(+), 4 deletions(-)
>>>>>>>>>>
>>>>>>>>>> diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
>>>>>>>>>> index 5d19baae6a38..1a6131608036 100644
>>>>>>>>>> --- a/drivers/pps/pps.c
>>>>>>>>>> +++ b/drivers/pps/pps.c
>>>>>>>>>> @@ -354,7 +354,7 @@ int pps_register_cdev(struct pps_device *pps)
>>>>>>>>>>            * Get new ID for the new PPS source.  After idr_alloc() calling
>>>>>>>>>>            * the new source will be freely available into the kernel.
>>>>>>>>>>            */
>>>>>>>>>> -    err = idr_alloc(&pps_idr, pps, 0, PPS_MAX_SOURCES, GFP_KERNEL);
>>>>>>>>>> +    err = idr_alloc(&pps_idr, pps, 0, MINORMASK, GFP_KERNEL);
>>>>>>>>>>           if (err < 0) {
>>>>>>>>>>               if (err == -ENOSPC) {
>>>>>>>>>>                   pr_err("%s: too many PPS sources in the system\n",
>>>>>>>>>> @@ -449,7 +449,7 @@ EXPORT_SYMBOL(pps_lookup_dev);
>>>>>>>>>>       static void __exit pps_exit(void)
>>>>>>>>>>       {
>>>>>>>>>>           class_destroy(pps_class);
>>>>>>>>>> -    unregister_chrdev_region(pps_devt, PPS_MAX_SOURCES);
>>>>>>>>>> +    unregister_chrdev_region(pps_devt, MINORMASK);
>>>>>>>>>>       }
>>>>>>>>>>       static int __init pps_init(void)
>>>>>>>>>> @@ -463,7 +463,7 @@ static int __init pps_init(void)
>>>>>>>>>>           }
>>>>>>>>>>           pps_class->dev_groups = pps_groups;
>>>>>>>>>> -    err = alloc_chrdev_region(&pps_devt, 0, PPS_MAX_SOURCES, "pps");
>>>>>>>>>> +    err = alloc_chrdev_region(&pps_devt, 0, MINORMASK, "pps");
>>>>>>>>>>           if (err < 0) {
>>>>>>>>>>               pr_err("failed to allocate char device region\n");
>>>>>>>>>>               goto remove_class;
>>>>>>>>>> diff --git a/include/uapi/linux/pps.h b/include/uapi/linux/pps.h
>>>>>>>>>> index 90f2e86020ba..8a4096f18af1 100644
>>>>>>>>>> --- a/include/uapi/linux/pps.h
>>>>>>>>>> +++ b/include/uapi/linux/pps.h
>>>>>>>>>> @@ -26,7 +26,6 @@
>>>>>>>>>>       #include <linux/types.h>
>>>>>>>>>>       #define PPS_VERSION        "5.3.6"
>>>>>>>>>> -#define PPS_MAX_SOURCES        MINORMASK
>>>>>>>>>
>>>>>>>>> Why change this in patch 1, and then delete this here?
>>>>>>>>>
>>>>>>>>> That makes no sense.
>>>>>>>>
>>>>>>>> I did it in two steps to be clear that the first step is about a better
>>>>>>>> redefinition of the PPS_MAX_SOURCES define, while the second step is about
>>>>>>>> the fact it's now that define is useless.
>>>>>>>
>>>>>>> Better to just convert everything in patch one, and then in patch 2
>>>>>>> delete the .h #define.  That way, when userspace breaks, you can revert
>>>>>>> just the last patch :)
>>>>>>
>>>>>> I'm puzzled since I did as you say... patch 1/2 increases PPS_MAX_SOURCES
>>>>>> value while patch 2/2 drops PPS_MAX_SOURCES define.
>>>>>
>>>>> Ah, I thought patch 1/2 renamed it.
>>>>
>>>> No, patch 1/2 just safely increases PPS_MAX_SOURCES value as other drivers does.
>>>>
>>>>> But why increase it if you are removing it?
>>>>
>>>> As I said I splitted the modification in two steps just to highlight that the first step is a better redefinition of PPS_MAX_SOURCES, while the second step drops it since it's useless for userspace. As you noticed this last step is not trivial since it may breaks some userspace programs, but it's also true that RFC2783 doesn't define it, so well written userspace programs should not use that define and then they should not break at all. :)
>>>>
>>>>>>>>> And if this is exported to userspace, removing it should break things,
>>>>>>>>> right?  If not, why was it there in the first place?
>>>>>>>>
>>>>>>>> In reality such define is not stated within the PPS RFC2783, so userspace
>>>>>>>> programs whose relies on such define are broken.
>>>>>>>
>>>>>>> RFC's do not document Linux kernel apis.
>>>>>>
>>>>>> It's true, but well written PPS clients should relay only on PPS API which
>>>>>> in turn doesn't states that define. :P
>>>>>
>>>>> Are you sure?  Have you audited the clients?  if so, please document
>>>>> that in the changelog text.
>>>>
>>>> OK, I'm going to re-write the changelog text adding this information.
>>>>
>>>>>>> So if any userspace code breaks, you have to put this back, sorry.
>>>>>>
>>>>>> If you think that patch 2 is not good, no problem, just drop it, but please
>>>>>> just consider applying patch 1, since increasing PPS_MAX_SOURCES value is
>>>>>> good.
>>>>>
>>>>> You can't change a uapi value either without breaking things :(
>>>>
>>>> I see, but in this case what do you suggest to do? Keeping 1/2 and dropping 2/2?
>>>
>>> I'm confused here. Is the problem just that the uapi value cannot be dropped (since it is part of uapi) and only patch 1 can be applied?
>>
>> Yes.
>>
>>> Or is it that the uapi value cannot be dropped OR changed so neither patch can be applied?
>>
>> No.
>>
>>> If the latter, how would one go about raising a value like this to allow a higher limit without causing issues for existing uapi users?
>>
>> My opinion is that both patches should be applied since, the first one just increases the value of possible PPS sources, while the second just drops a define that userspace tools should NOT use since RFC 2783 - Pulse-Per-Second API for UNIX-like Operating Systems doesn't define it.
>>
>> Is some userspace tool breaks, it should be fixed.
>>
>> Ciao,
>>
>> Rodolfo
>>
> 
> Hi Rodolfo,
> 
> Is there any other testing or help I can provide for this patch set?

I don't think so... I'll to ask to Greg to just apply the first patch and drop 
the second one.

Ciao,

Rodolfo

-- 
GNU/Linux Solutions                  e-mail: giometti@enneenne.com
Linux Device Driver                          giometti@linux.it
Embedded Systems                     phone:  +39 349 2432127
UNIX programming                     skype:  rodolfo.giometti


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

end of thread, other threads:[~2023-08-09  7:12 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-30  7:18 [PATCH 1/2] include/uapi pps.h: increase PPS_MAX_SOURCES value Rodolfo Giometti
2023-06-30  7:18 ` [PATCH 2/2] include/uapi pps.h: drop not needed PPS_MAX_SOURCES define Rodolfo Giometti
2023-06-30  7:31   ` Greg Kroah-Hartman
2023-06-30  7:50     ` Rodolfo Giometti
2023-06-30 12:53       ` Greg Kroah-Hartman
2023-06-30 13:29         ` Rodolfo Giometti
2023-07-03 13:38           ` Greg Kroah-Hartman
2023-07-03 14:47             ` Rodolfo Giometti
2023-07-17 15:52               ` Charlie Johnston
2023-07-18  7:47                 ` Rodolfo Giometti
2023-08-08 17:58                   ` Charlie Johnston
2023-08-09  7:12                     ` Rodolfo Giometti

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.