Re: [PATCH v3] usb: gadget: f_fs: expose ready state in configfs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>>>>> "Andrzej" == Andrzej Pietrasiewicz <andrzej.p@xxxxxxxxxxxxx> writes:

 > Hi Peter,
 > W dniu 18.01.2024 o 15:48, Peter Korsgaard pisze:
 >> When a USB gadget is configured through configfs with 1 or more f_fs
 >> functions, then the logic setting up the gadget configuration has to wait
 >> until the user space code (typically separate applications) responsible for
 >> those functions have written their descriptors before the gadget can be
 >> activated.
 >> The f_fs instance already knows if this has been done, so expose it
 >> through
 >> a "ready" attribute in configfs for easier synchronization.
 >> Signed-off-by: Peter Korsgaard <peter@xxxxxxxxxxxxx>
 >> ---
 >> Changes since v2:
 >> - Add ABI documentation as requested by Greg
 >> Changes since v1:
 >> - Add documentation snippet as requested by Greg.
 >> Documentation/ABI/testing/configfs-usb-gadget-ffs | 12
 >> ++++++++++--
 >> Documentation/usb/gadget-testing.rst              |  8 ++++++++
 >> drivers/usb/gadget/function/f_fs.c                | 15 +++++++++++++++
 >> 3 files changed, 33 insertions(+), 2 deletions(-)
 >> diff --git a/Documentation/ABI/testing/configfs-usb-gadget-ffs
 >> b/Documentation/ABI/testing/configfs-usb-gadget-ffs
 >> index e39b27653c65..bf8936ff6d38 100644
 >> --- a/Documentation/ABI/testing/configfs-usb-gadget-ffs
 >> +++ b/Documentation/ABI/testing/configfs-usb-gadget-ffs
 >> @@ -4,6 +4,14 @@ KernelVersion:	3.13
 >> Description:	The purpose of this directory is to create and remove it.
 >> A corresponding USB function instance is
 >> created/removed.
 >> -		There are no attributes here.
 >> -		All parameters are set through FunctionFS.
 >> +		All attributes are read only:
 >> +
 >> +		=============	============================================
 >> +		ready		1 if the function is ready to be used, E.G.
 >> +				if userspace has written descriptors and
 >> +				strings to ep0, so the gadget can be
 >> +				enabled - 0 otherwise.
 >> +		=============	============================================
 >> +
 >> +		All other parameters are set through FunctionFS.
 >> diff --git a/Documentation/usb/gadget-testing.rst b/Documentation/usb/gadget-testing.rst
 >> index 29072c166d23..fcbd8bb22db4 100644
 >> --- a/Documentation/usb/gadget-testing.rst
 >> +++ b/Documentation/usb/gadget-testing.rst
 >> @@ -206,6 +206,14 @@ the standard procedure for using FunctionFS (mount it, run the userspace
 >> process which implements the function proper). The gadget should be enabled
 >> by writing a suitable string to usb_gadget/<gadget>/UDC.
 >> +The FFS function provides just one attribute in its function
 >> directory:
 >> +
 >> +	ready
 >> +
 >> +The attribute is read-only and signals if the function is ready (1) to be
 >> +used, E.G. if userspace has written descriptors and strings to ep0, so
 >> +the gadget can be enabled.
 >> +
 >> Testing the FFS function
 >> ------------------------
 >> diff --git a/drivers/usb/gadget/function/f_fs.c
 >> b/drivers/usb/gadget/function/f_fs.c
 >> index fdd0fc7b8f25..ae44dd5f3a94 100644
 >> --- a/drivers/usb/gadget/function/f_fs.c
 >> +++ b/drivers/usb/gadget/function/f_fs.c
 >> @@ -3446,6 +3446,20 @@ static inline struct f_fs_opts *to_ffs_opts(struct config_item *item)
 >> func_inst.group);
 >> }
 >> +static ssize_t f_fs_opts_ready_show(struct config_item *item,
 >> char *page)
 >> +{
 >> +	struct f_fs_opts *opts = to_ffs_opts(item);
 >> +
 >> +	return sprintf(page, "%d\n", opts->dev->desc_ready);

 > Don't we need some locking here? "desc_ready" seems to be manipulated
 > always under ffs_dev_lock().

Ups, indeed. It is just a boolean, but the instance could disappear from
under us.

I'll send an update, thanks.

-- 
Bye, Peter Korsgaard





[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux