Hi,

On Fri, Feb 27, 2015 at 02:55:25PM -0600, Felipe Balbi wrote:
> On Mon, Feb 23, 2015 at 04:02:09PM +0100, Andrzej Pietrasiewicz wrote:
> > Non-standard requests can encode the actual interface number in a
> > non-standard way. For example composite_setup() assumes
> > that it is w_index && 0xFF, but the printer function encodes the interface
> > number in a context-dependet way (either w_index or w_index >> 8).
> > This can lead to such requests being directed to wrong functions.
> > 
> > This patch adds req_match() method to usb_function. Its purpose is to
> > verify that a given request can be handled by a given function.
> > If any function within a configuration provides the method and it returns
> > true, then it is assumed that the right function is found.
> > 
> > If a function uses req_match(), it should try as hard as possible to
> > determine if the request is meant for it.
> > 
> > If no functions in a configuration provide req_match or none of them
> > returns true, then fall back to the usual approach.
> > 
> > Signed-off-by: Andrzej Pietrasiewicz <andrze...@samsung.com>
> 
> this regresses testusb at least on am335x:
> 
> test 14: control writes
> [   32.968145] usbtest 2-1:3.0: TEST 14:  15000 ep0out, 1..256 vary 1
> [   32.974659] Unable to handle kernel paging request at virtual address 
> 00400402
> [   32.982199] pgd = dd3fc000
> [   32.985021] [00400402] *pgd=00000000
> [   32.988765] Internal error: Oops: 80000005 [#1] SMP ARM
> [   32.994217] Modules linked in: usbtest usb_f_ss_lb g_zero libcomposite 
> configfs musb_dsps musb_hdrc udc_core usbcore usb_common omap_rng rng_core 
> musb_am335x rtc_omap omap_wdt leds_gpio led_class ipv6 autofs4
> [   33.013652] CPU: 0 PID: 219 Comm: testusb Tainted: G        W       
> 4.0.0-rc1-00069-g00b54e1bab53 #350
> [   33.023364] Hardware name: Generic AM33XX (Flattened Device Tree)
> [   33.029722] task: dd27c680 ti: dd2c2000 task.ti: dd2c2000
> [   33.035358] PC is at 0x400402
> [   33.038499] LR is at composite_setup+0x29c/0x16f0 [libcomposite]
> [   33.044767] pc : [<00400402>]    lr : [<bf166f34>]    psr: 200301b3
> [   33.044767] sp : dd2c3ad8  ip : bf179668  fp : 00000040
> [   33.056747] r10: 00000000  r9 : dd2c3b48  r8 : 00000000
> [   33.062197] r7 : 00000000  r6 : bf179690  r5 : bf17963c  r4 : dd26f280
> [   33.069008] r3 : 00400403  r2 : bf179690  r1 : dd2c3b48  r0 : bf17963c
> [   33.075821] Flags: nzCv  IRQs off  FIQs on  Mode SVC_32  ISA Thumb  
> Segment user
> [   33.083538] Control: 10c5387d  Table: 9d3fc019  DAC: 00000015
> [   33.089533] Process testusb (pid: 219, stack limit = 0xdd2c2218)
> [   33.095800] Stack: (0xdd2c3ad8 to 0xdd2c4000)
> [   33.100346] 3ac0:                                                       
> 00000000 1f205000
> [   33.108883] 3ae0: c083c880 dfa41880 00000000 00000100 dd2c3d6c 00000000 
> 00000000 00000003
> [   33.117419] 3b00: 00000001 00000001 c0064714 c08c3afb dd2c3b4e e1a26410 
> dd237010 bf12b014
> [   33.125956] 3b20: e1a26400 bf12b010 dd236304 dd236010 00000001 bf125244 
> e1a26410 00000000
> [   33.134492] 3b40: 00000000 00000000 00005b40 01000000 39363831 dd2362f0 
> dd236010 bf12b008
> [   33.143029] 3b60: dd237010 00000000 dd2362ec 00000099 00000000 bf120908 
> dd26eb80 de524010
> [   33.151565] 3b80: 00000001 bf122dc8 00000001 dd26eb80 00000841 c08c3afb 
> c070b44e dd236010
> [   33.160102] 3ba0: 00000000 bf14f148 dd287650 dd2362f0 60030193 e1a28000 
> c08bd83c bf14e6bc
> [   33.168639] 3bc0: bf14e5dc dd3e8600 dd284b20 000000af 00000000 00000000 
> 00000000 c08bd828
> [   33.177175] 3be0: c08bd83c c0084c1c de111610 00000004 00000000 dd284ac0 
> 00000010 dd284ac0
> [   33.185712] 3c00: dd284b20 c0841594 00000000 00000001 de013000 000001f4 
> 00000000 c0084df8
> [   33.194248] 3c20: dd284ac0 000000af c0841594 c0087a30 000000af c0084304 
> c083ad30 c00845ac
> [   33.202785] 3c40: dd2c3c78 c088db80 dd2c3c78 c08fffc0 00000012 c0840100 
> 00000000 c0008690
> [   33.211322] 3c60: c0574a80 c0308db8 40030013 ffffffff dd2c3cac c0575cc0 
> dd2c3cf8 ffffffd0
> [   33.219858] 3c80: 00000000 00000000 ffff99a4 c0572e28 dd2c3cc4 00000002 
> c0840100 00000000
> [   33.228395] 3ca0: 000001f4 00000000 00000000 dd2c3cc0 c0574a80 c0308db8 
> 40030013 ffffffff
> [   33.236931] 3cc0: 00000000 00000000 c073fa98 dd2c3dc4 c08d4c40 0000000e 
> dd2c3d08 ffffffff
> [   33.245468] 3ce0: ffffffff 00000000 00000000 00000000 00000000 00000000 
> dd2c3d54 dd2c2000
> [   33.254004] 3d00: dd2c3d58 00000002 00000000 c0572e28 73753d4d 00000001 
> dd27c680 c0064714
> [   33.262541] 3d20: dd2c3d5c dd2c3d5c dd270030 dd26eb80 dd2c3d54 00000000 
> dd2c3d8c 00001388
> [   33.271077] 3d40: 00000000 0000005b 00000040 bf0a218c 00000000 00000000 
> 00010001 dd2c3d20
> [   33.279614] 3d60: dd2c3d20 de497000 dd37c9c0 00000100 00000000 00000000 
> de497000 bf0a22a0
> [   33.288150] 3d80: 00000000 80000200 dd3811b0 dd2c3df0 00000006 dd26e680 
> 00000100 de453800
> [   33.296687] 3da0: 00000000 00000100 de497068 de497000 00000000 bf189434 
> 00000000 00000000
> [   33.305223] 3dc0: de453800 00000100 00001388 dd2c3df0 00000100 00003a98 
> 00000001 dd26e680
> [   33.313760] 3de0: dd26e680 00000000 dd26e680 de497000 dd31d200 dd37c940 
> dd37c940 bf18e4b0
> [   33.322296] 3e00: de497068 bf18bde0 00000000 00000001 de445ad0 ddb7bd48 
> dd2c3ef0 00000000
> [   33.330833] 3e20: dd26e6b0 c014b66c 00000000 00000003 00000000 dd2dd100 
> 0020080c dda00aa0
> [   33.339369] 3e40: 00000008 dda00af0 54f0d9b5 0002d71f 00000101 dd2c3ef0 
> 00000000 00000000
> [   33.347906] 3e60: 00000000 c00c5512 dd3e99c8 c0133098 00000000 c0148e60 
> dfdf265c dd2dd100
> [   33.356443] 3e80: dd2c3ef0 c00c5512 dd3e99c8 de49709c 0000001c dd37c940 
> dd0ebc00 be89bb90
> [   33.364980] 3ea0: de497068 bf0ad3d8 dfe89a64 00000002 de445ad0 ddbf4c38 
> dd0e16b8 b6f73000
> [   33.373516] 3ec0: dd0e1240 dd2c3f74 00000001 dd2df000 ffffff9c c000e7a4 
> dd2c2000 00000000
> [   33.382053] 3ee0: c01c5564 000330d8 00000041 b6f73000 de445ad0 ddbf4c38 
> 00323030 00000003
> [   33.390589] 3f00: dd2df025 c0091e34 00000000 dd3e99c8 be89bb90 dd2dd100 
> be89bb90 c00c5512
> [   33.399126] 3f20: 00000003 00000000 000330c0 c0151514 dd2df000 00000fec 
> 00000000 00000000
> [   33.407662] 3f40: 00000002 00000003 c0841680 00000003 00000020 dd2df000 
> dd2dd100 dd2dd108
> [   33.416199] 3f60: dd3e99c8 c013f900 00000000 00000000 dd2dd100 dd2dd100 
> be89bb90 c00c5512
> [   33.424735] 3f80: 00000003 c0151794 000330d8 0000000e 000330c0 000330e8 
> 00000036 c000e7a4
> [   33.433272] 3fa0: dd2c2000 c000e620 0000000e 000330c0 00000003 c00c5512 
> be89bb90 000330d8
> [   33.441808] 3fc0: 0000000e 000330c0 000330e8 00000036 c01c5564 000215d4 
> 00000000 000330c0
> [   33.450345] 3fe0: b6ecb401 be89bb84 00010e89 b6ecb406 80030030 00000003 
> 76e90301 685c082e
> [   33.458963] [<bf166f34>] (composite_setup [libcomposite]) from 
> [<bf125244>] (musb_g_ep0_irq+0x110/0xb7c [musb_hdrc])
> [   33.469981] [<bf125244>] (musb_g_ep0_irq [musb_hdrc]) from [<bf120908>] 
> (musb_interrupt+0x470/0xac0 [musb_hdrc])
> [   33.480622] [<bf120908>] (musb_interrupt [musb_hdrc]) from [<bf14e6bc>] 
> (dsps_interrupt+0xe0/0x254 [musb_dsps])
> [   33.491177] [<bf14e6bc>] (dsps_interrupt [musb_dsps]) from [<c0084c1c>] 
> (handle_irq_event_percpu+0x38/0x1cc)
> [   33.501443] [<c0084c1c>] (handle_irq_event_percpu) from [<c0084df8>] 
> (handle_irq_event+0x48/0x68)
> [   33.510709] [<c0084df8>] (handle_irq_event) from [<c0087a30>] 
> (handle_level_irq+0xb0/0x14c)
> [   33.519430] [<c0087a30>] (handle_level_irq) from [<c0084304>] 
> (generic_handle_irq+0x28/0x3c)
> [   33.528241] [<c0084304>] (generic_handle_irq) from [<c00845ac>] 
> (__handle_domain_irq+0x64/0xe0)
> [   33.537326] [<c00845ac>] (__handle_domain_irq) from [<c0008690>] 
> (omap_intc_handle_irq+0xb4/0xc4)
> [   33.546599] [<c0008690>] (omap_intc_handle_irq) from [<c0575cc0>] 
> (__irq_svc+0x40/0x54)
> [   33.554951] Exception stack(0xdd2c3c78 to 0xdd2c3cc0)
> [   33.560221] 3c60:                                                       
> dd2c3cf8 ffffffd0
> [   33.568758] 3c80: 00000000 00000000 ffff99a4 c0572e28 dd2c3cc4 00000002 
> c0840100 00000000
> [   33.577295] 3ca0: 000001f4 00000000 00000000 dd2c3cc0 c0574a80 c0308db8 
> 40030013 ffffffff
> [   33.585839] [<c0575cc0>] (__irq_svc) from [<c0308db8>] 
> (__memzero+0x58/0x80)
> [   33.593201] [<c0308db8>] (__memzero) from [<c0574a80>] 
> (schedule_timeout+0x44/0x1fc)
> [   33.601286] [<c0574a80>] (schedule_timeout) from [<c0572e28>] 
> (wait_for_common+0xa0/0x170)
> [   33.610051] [<c0572e28>] (wait_for_common) from [<bf0a218c>] 
> (usb_start_wait_urb+0x60/0xbc [usbcore])
> [   33.619754] [<bf0a218c>] (usb_start_wait_urb [usbcore]) from [<bf0a22a0>] 
> (usb_control_msg+0xb8/0xf0 [usbcore])
> [   33.630334] [<bf0a22a0>] (usb_control_msg [usbcore]) from [<bf189434>] 
> (ctrl_out+0xec/0x2d8 [usbtest])
> [   33.640063] [<bf189434>] (ctrl_out [usbtest]) from [<bf18bde0>] 
> (usbtest_ioctl+0x65c/0x18b4 [usbtest])
> [   33.649849] [<bf18bde0>] (usbtest_ioctl [usbtest]) from [<bf0ad3d8>] 
> (usbdev_ioctl+0x1690/0x1764 [usbcore])
> [   33.660082] [<bf0ad3d8>] (usbdev_ioctl [usbcore]) from [<c0151514>] 
> (do_vfs_ioctl+0x408/0x61c)
> [   33.669077] [<c0151514>] (do_vfs_ioctl) from [<c0151794>] 
> (SyS_ioctl+0x6c/0x7c)
> [   33.676716] [<c0151794>] (SyS_ioctl) from [<c000e620>] 
> (ret_fast_syscall+0x0/0x34)
> [   33.684620] Code: bad PC value
> [   33.687812] ---[ end trace c15cfa26bd79b87e ]---
> [   33.692629] Kernel panic - not syncing: Fatal exception in interrupt
> [   33.699263] ---[ end Kernel panic - not syncing: Fatal exception in 
> interrupt
> 
> I've dropped only this one from my queue.

actually, I was forced to drop the entire series because of dependencies
which i didn't want to sort out myself. Sorry

-- 
balbi

Attachment: signature.asc
Description: Digital signature

Reply via email to