On Tue, Sep 16, 2014 at 7:16 AM, Paul Zimmerman <Paul.Zimmerman@xxxxxxxxxxxx> wrote: >> From: dinguyen@xxxxxxxxxxxxxxxxxxxxx [mailto:dinguyen@xxxxxxxxxxxxxxxxxxxxx] >> Sent: Monday, September 15, 2014 8:23 AM >> >> Hi Ming-Lei, >> >> Thanks for your patch to enable the URB giveback in a tasklet context for >> the EHCI driver. I found your patch to fix a USB webcam timeout/stutter >> issue on the DWC2 HCD in the SOCFPGA platform. >> >> However, I need your help trying to figure out why I need the 2nd patch to >> get your URB giveback patch to fully work. >> >> I enable tracepoints in the dwc2 dwc2_handle_hcd_intr for irq:irq_handler_entry >> and irq:irq_handler_exit. However, I did not see any measurable differences >> between enabling HCD_BH and no enabling HCD_BH. But I am able to get a full >> image from a webcam with the following 2 patches, and timeouts/green screen >> without the 2 patches. >> >> I am using a Logitech HD C270 webcam. >> >> Opening video decoder: [raw] RAW Uncompressed Video >> Movie-Aspect is undefined - no prescaling applied. >> VO: [sdl] 640x480 => 640x480 Packed YUY2 >> Selected video codec: [rawyuy2] vfm: raw (RAW YUY2) >> >> Can you provide any comments on the following issues: >> >> 1) Am I placing the tracepoints in the right place for this non-ehci hcd? >> 2) I don't quite understand why removing local_irq_save/local_irq_restore >> around the the complete makes the webcam work? >> >> Thanks in advance for your comments. > > Hi Dinh, > > I'm not Ming, but I can hazard a guess why you are seeing this issue. > > The webcam driver is likely doing a lot of processing in the ->complete > callback. With local interrupts disabled, this probably causes too long > of a delay in handling other interrupts. Since the SOCFPGA platform is > a uniprocessor (I think), there is no other CPU to handle the other > interrupts. Per my previous observation, on some ARM platforms it is extremely slow to memcpy to DMA coherent buffer, which is used in uvcvideo at default. I remember Pandaboard should be one such platform. You can check if it is your case. > > I think the only solution is to look at whatever driver is handling the > webcam, and see if it can re-enable interrupts earlier. I believe this > is an OK thing for it to do when the interrupt handler is threaded. You need to persuade all usb camera drivers' maintainera to agree on this change to these drivers, :-) We discussed to take threaded-irq too, looks which may decrease usb-storage performance a bit. > Ah, wait. I just looked at the specs, and I see the SOCFPGA is > dual-core. So the second core should be available for handling the > other interrupts. I wonder if something is wrong there? Is the 2nd CPU > actually running? Are interrupts getting disabled on both CPUs somehow? The same interrupt can't be handled on two CPU cores at the same time. Thanks, -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html