Subject: Re: [PATCH v2 3/8] fwctl: FWCTL_INFO to return basic information about the device

From: Jason Gunthorpe <[email-masked]>
Date: Mon, 29 Jul 2024 13:35:13 -0300

On Fri, Jul 26, 2024 at 04:15:03PM +0100, Jonathan Cameron wrote:
> On Mon, 24 Jun 2024 19:47:27 -0300
> Jason Gunthorpe <[email-masked]> wrote:
> 
> > Userspace will need to know some details about the fwctl interface being
> > used to locate the correct userspace code to communicate with the
> > kernel. Provide a simple device_type enum indicating what the kernel
> > driver is.
> 
> As below - maybe consider a UUID?
> Would let you decouple allocating those with upstreaming drivers.
> We'll just get annoying races on the enum otherwise as multiple
> drivers get upstreamed that use this.

I view the coupling as a feature - controlling uABI number assignment
is one of the subtle motivations the kernel community has typically
used to encourage upstream participation.

> >  static dev_t fwctl_dev;
> >  static DEFINE_IDA(fwctl_ida);
> >  
> > +DEFINE_FREE(kfree_errptr, void *, if (!IS_ERR_OR_NULL(_T)) kfree(_T));
> 
> Why need for a new one?  That's the same as the one in slab.h from
> 6.9 onwards. Before that it was
> if (_T)
> 
> I was going to suggest promoting this to slab.h and then found
> the normal implementation had been improved since I last checked.

Same, now it is improved it can go away.

> > +/**
> > + * struct fwctl_info - ioctl(FWCTL_INFO)
> > + * @size: sizeof(struct fwctl_info)
> > + * @flags: Must be 0
> > + * @out_device_type: Returns the type of the device from enum fwctl_device_type
> 
> Maybe a UUID?  Avoid need to synchronize that list for ever.
> 
> > + * @device_data_len: On input the length of the out_device_data memory. On
> > + *	output the size of the kernel's device_data which may be larger or
> > + *	smaller than the input. Maybe 0 on input.
> > + * @out_device_data: Pointer to a memory of device_data_len bytes. Kernel will
> > + *	fill the entire memory, zeroing as required.
> 
> Why do we need device in names of these two?

I'm not sure I understand this question?

out_device_type returns the "name"

out_device_data returns a struct of data, the layout of the struct is
defined by out_device_type

Jason