Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
Non stopable vibration on various games / apps #27
Comments
|
can you provide |
|
I can also reproduce this on Arch. I have tested on Saints row 4 (present), Bioshock Infinite (present), GRID Autosport (not present)
(some USB logs removed for clarity, let me know if they are actually relevant) |
|
I just tested with 2fbc567 (correctly handle concurrent LED and FF requests) and the previous commit (f23507b). It appears this bug was introduced in 2fbc567 When I build f23507b and start SR4 I no errors in Using 2fbc567, if I
Using 2fbc567, if I unplug while vibrating:
When I reconnect:
At one point (I think I was using f23507b) I managed to get this output in dmesg:
|
|
Interestingly this regression also occurs when using Sarah Bessmer's URB corruption patch Perhaps @ValveSoftware were right to use a queue? Or is it more subtle than that? I wonder if @dtor has any imput.. |
Turbito
commented
Apr 15, 2016
|
It happens to me too with the Saints Row 2 port |
|
the dmesg error says that we are using an active URB somewhere. i.e. that the busy URB tracking introduced here missed something. If you can read the code, you could try to review the above commit if you find something suspecious. It will take me a couple of weeks until I can look at it. |
orbea
commented
May 20, 2016
•
|
Just a heads up that this issue is now present in the 4.5.5 and 4.6.0 kernels as experienced with the mupen64plus libretro core. Reversing the commits until 2fbc567 is a temporary workaround. |
|
@paroj take a look at this, not sure.. https://github.com/dantob/xpad/commit/158cdf40f7a63b7fae179320c80a1630151c5c46 |
|
am I correct that this bug only occurs with the wired xbox360 controller? |
|
I haven't seen any reports using anything other than the wired 360. I've only tested with the wired 360 controller myself. I'm unable to test @dantob's commit myself currently as I am away from my main computer for the week. EDIT: having looked around the couple bug reports I found are all for 360 wired. There was one that only specified 360. |
|
anybody affected by this bug could you run the I own a x360w controller, where this works fine. |
mcphail
commented
May 25, 2016
|
I'm the submitter of https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1574102 and use a wired 360 controller. Running Running The maintainer of the Saints Row Linux ports has commented they switch rumble on and off very quickly when the game loads to test rumble functionality. Is the cadence of the on/off signal important? Is this a race, by any chance? |
|
ok, this makes it more likely that the implementation in Saints Row3 is flawed. 2fbc567 changed the way the driver behaves if it gets FF commands faster than it is able to send them. We do not use a real queue like Valve as it would allow user-space applications to provoke a non-recoverable out of memory condition by spamming the driver with FF commands. |
mcphail
commented
May 26, 2016
|
Is there a way to prioritise FF "off" events so at least one of them is preserved at the end of the queue? That would satisfy both scenarios. |
|
I think like @mcphail hinted at, I think we should keep track seperatley of different types of events. E.g. if an LED event goes through, it shouldn't wipe a FF event (or any unrelated event). It makes sense for a FF off to replace a FF on and vice versa, but I think it should be tracked seperatley from other events. Other types of event might make sense to have their own tracking. You could iterate between types of request each time you dispatch one so that one doesn't take priority |
|
We should be doing proper round-robin of the 3 different types of packets - control, LED and force feedback. That said, I think we reset "pending" flag on buffer at the wrong time (or on the wrong buffer). I.e. currently reset it only after data has been successfully transmitted to the device and if new packet comes in before that we will effectively lose it. Can you try removing "xpad->out_packets[xpad->last_out_packet].pending = false;" from xpad_irq_out() and adding "packet->pending = false" to the "if (packet)" branch in xpad_prepare_next_out_packet(). Thanks, |
added a commit
that referenced
this issue
May 26, 2016
|
@dtor actually I was just investigating the issue and also had the pending flag in mind. I found out that Saints Row3 was part in one of my Humble Bundles and could reproduce the error. Your suggestion indeed fixes it. |
paroj
closed this
May 26, 2016
|
Please send the fix to linux-input so that I can apply. |
Erazor84 commentedMar 20, 2016
With the 0.4 module installed (to prevent the system freeze with codemasters games on ubuntu),
i have problems in many games / programms.
If i start Saints row 4, the controller immideatly starts vibrating without stop. the only way to stop it is to uninstall 0.4 or unplug the controller.
also with the programm "dolphin emulator". every game vibrate without stop.
the "original" kernel module, that is shipped with ubuntu mate 16.04 beta, does not have this problem.
sorry for my english.
i'm using a black wired xbox 360 controller.