Re: [PATCH 2/2] usb: gadget: ffs: fix: Always call ffs_closed() in ffs_data_clear()

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

 



On Fri, May 22, 2015 at 05:25:18PM +0200, Krzysztof Opasiak wrote:
> Originally FFS_FL_CALL_CLOSED_CALLBACK flag has been used to
> indicate if we should call ffs_closed_callback().
> 
> Commit 4b187fceec3c ("usb: gadget: FunctionFS: add devices
> management code") changed its semantic to indicate if we should
> call ffs_closed() function which does a little bit more.
> 
> This situation leads to:
> 
> [  122.362269] ------------[ cut here ]------------
> [  122.362287] WARNING: CPU: 2 PID: 2384 at drivers/usb/gadget/function/f_fs.c:3417 ffs_ep0_write+0x730/0x810 [usb_f_fs]()
> [  122.362292] Modules linked in:
> [  122.362555] CPU: 2 PID: 2384 Comm: adbd Tainted: G        W       4.1.0-0.rc4.git0.1.1.fc22.i686 #1
> [  122.362561] Hardware name: To be filled by O.E.M. To be filled by O.E.M./Aptio CRB, BIOS 5.6.5 07/25/2014
> [  122.362567]  c0d1f947 415badfa 00000000 d1029e64 c0a86e54 00000000 d1029e94 c045b937
> [  122.362584]  c0c37f94 00000002 00000950 f9b313d4 00000d59 f9b2ebf0 f9b2ebf0 fffffff0
> [  122.362600]  00000003 deb53d00 d1029ea4 c045ba42 00000009 00000000 d1029f08 f9b2ebf0
> [  122.362617] Call Trace:
> [  122.362633]  [<c0a86e54>] dump_stack+0x41/0x52
> [  122.362645]  [<c045b937>] warn_slowpath_common+0x87/0xc0
> [  122.362658]  [<f9b2ebf0>] ? ffs_ep0_write+0x730/0x810 [usb_f_fs]
> [  122.362668]  [<f9b2ebf0>] ? ffs_ep0_write+0x730/0x810 [usb_f_fs]
> [  122.362678]  [<c045ba42>] warn_slowpath_null+0x22/0x30
> [  122.362689]  [<f9b2ebf0>] ffs_ep0_write+0x730/0x810 [usb_f_fs]
> [  122.362702]  [<f9b2e4c0>] ? ffs_ep0_read+0x380/0x380 [usb_f_fs]
> [  122.362712]  [<c05a1c1f>] __vfs_write+0x2f/0x100
> [  122.362722]  [<c05a42f2>] ? __sb_start_write+0x52/0x110
> [  122.362731]  [<c05a2534>] vfs_write+0x94/0x1b0
> [  122.362740]  [<c0a8a1c0>] ? mutex_lock+0x10/0x30
> [  122.362749]  [<c05a2f41>] SyS_write+0x51/0xb0
> [  122.362759]  [<c0a8c71f>] sysenter_do_call+0x12/0x12
> [  122.362766] ---[ end trace 0673d3467cecf8db ]---
> 
> in some cases (reproduction path below). This commit get back
> semantic of that flag and ensures that ffs_closed() is called
> always when needed but ffs_closed_callback() is called only
> if this flag is set.
> 
> Reproduction path:
> Compile kernel without any UDC driver or bound some gadget
> to existing one and then:
> 
> $ modprobe g_ffs
> $ mount none -t functionfs mount_point
> $ ffs-example mount_point
> 
> This will fail with -ENODEV as there is no udc.
> 
> $ ffs-example mount_point
> 
> This will fail with -EBUSY because ffs_data has not been
> properly cleaned up.
> 
> Signed-off-by: Krzysztof Opasiak <k.opasiak@xxxxxxxxxxx>

adds new sparse warnings:

drivers/usb/gadget/function/f_fs.c:1043:45: warning: incorrect type in argument 1 (different address spaces)
drivers/usb/gadget/function/f_fs.c:1043:45:    expected void [noderef] <asn:1>*to
drivers/usb/gadget/function/f_fs.c:1043:45:    got void *<noident>
drivers/usb/gadget/function/f_fs.c:205:12: warning: context imbalance in '__ffs_ep0_queue_wait' - unexpected unlock
drivers/usb/gadget/function/f_fs.c:383:17: warning: context imbalance in 'ffs_ep0_write' - different lock contexts for basic block
drivers/usb/gadget/function/f_fs.c:423:24: warning: context imbalance in '__ffs_ep0_read_events' - unexpected unlock
drivers/usb/gadget/function/f_fs.c:429:16: warning: context imbalance in 'ffs_ep0_read' - different lock contexts for basic block

dropped for now.

-- 
balbi

Attachment: signature.asc
Description: Digital signature


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

  Powered by Linux