Moin,
ich habe neue Erkenntnisse. Folgende Modifikation habe ich getestet:
void xhci_queue_new_dequeue_state(struct xhci_hcd *xhci,
unsigned int slot_id, unsigned int ep_index,
unsigned int stream_id,
struct xhci_dequeue_state *deq_state)
{
struct xhci_virt_ep *ep = &xhci->devs[slot_id]->eps[ep_index];
printk(KERN_INFO"FINDME slot_id = %d, ep_index = %u ", slot_id, ep_index);
if (ep == NULL) {
printk(KERN_INFO"FINDME Warning dev not valid\n");
printk(KERN_INFO"FINDME Crashing now...\n");
}
if (deq_state == NULL) {
printk(KERN_INFO"FINDME deq_state == NULL\n");
printk(KERN_INFO"FINDME Crashing now...\n");
}
if (xhci == NULL) {
printk(KERN_INFO"FINDME xhci == NULL\n");
printk(KERN_INFO"FINDME Crashing now...\n");
}
/*xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb,
"Set TR Deq Ptr cmd, new deq seg = %p (0x%llx dma), "
"new deq ptr = %p (0x%llx dma), new cycle = %u",
deq_state->new_deq_seg,
(unsigned long long)deq_state->new_deq_seg->dma,
deq_state->new_deq_ptr,
(unsigned long long)xhci_trb_virt_to_dma(deq_state->new_deq_seg, deq_state->new_deq_ptr),
deq_state->new_cycle_state);*/
queue_set_tr_deq(xhci, slot_id, ep_index, stream_id,
deq_state->new_deq_seg,
deq_state->new_deq_ptr,
(u32) deq_state->new_cycle_state);
/* Stop the TD queueing code from ringing the doorbell until
* this command completes. The HC won't set the dequeue pointer
* if the ring is running, and ringing the doorbell starts the
* ring running.
*/
ep->ep_state |= SET_DEQ_PENDING;
}
Diese Funktion hat folgende Ausgabe ergeben:
Jul 17 20:01:43 mc mythfrontend.real: message repeated 2 times: [ mythfrontend[5824]: W CoreContext mythplayer.cpp:3128 (PauseDecoder) Player(0): Waited 100ms for decoder to pause]
Jul 17 20:01:44 mc mythfrontend.real: message repeated 2 times: [ mythfrontend[5824]: W CoreContext mythplayer.cpp:3128 (PauseDecoder) Player(0): Waited 100ms for decoder to pause]
Jul 17 20:01:52 mc kernel: [13479.830494] FINDME slot_id = 1, ep_index = 2 <4>[13498.025432] ------------[ cut here ]------------
Jul 17 20:01:52 mc kernel: [13498.025454] WARNING: CPU: 0 PID: 3959 at drivers/usb/host/xhci-ring.c:574 xhci_find_new_dequeue_state+0xc5/0x320()
Jul 17 20:01:52 mc kernel: [13492.083717] FINDME slot_id = 1, ep_index = 2
Jul 17 20:01:52 mc kernel: [13498.025458] Modules linked in: pci_stub(F) vboxpci(OF) vboxnetadp(OF) vboxnetflt(OF) vboxdrv(OF) bridge(F) stp(F) llc(F) joydev(F) snd_oxygen(F) snd_oxygen_lib(F) snd_mpu401_uart(F) snd_pcm(F) snd_page_alloc(F) snd_seq_midi(F) snd_seq_midi_event(F) snd_rawmidi(F) x86_pkg_temp_thermal(F) intel_powerclamp(F) coretemp(F) bnep(F) kvm_intel(F) rfcomm(F) kvm(F) crct10dif_pclmul(F) bluetooth(F) crc32_pclmul(F) ghash_clmulni_intel(F) aesni_intel(F) aes_x86_64(F) lrw(F) gf128mul(F) glue_helper(F) ablk_helper(F) cryptd(F) i915(F) snd_seq(F) drm_kms_helper(F) serio_raw(F) snd_seq_device(F) snd_timer(F) snd(F) soundcore(F) shpchp(F) lpc_ich(F) parport_pc(F) fujitsu_laptop(F) ppdev(F) drm(F) mei_me(F) mei(F) i2c_algo_bit(F) tpm_infineon(F) video(F) mac_hid(F) lp(F) parport(F) binfmt_misc(F) hid_sunplus(F) psmouse(F) ahci(F) libahci(F) e1000e(F) ptp(F) usbhid(F) hid(F) pps_core(F)
Jul 17 20:01:52 mc kernel: [13498.025561] CPU: 0 PID: 3959 Comm: mediasrv Tainted: GF O 3.13.11.2.ds02. #1
Jul 17 20:01:52 mc kernel: [13498.025565] Hardware name: FUJITSU D3222-B1/D3222-B1, BIOS V4.6.5.4 R1.23.0 for D3222-B1x 05/16/2014
Jul 17 20:01:52 mc kernel: [13498.025569] 0000000000000009 ffff8803da3cbc40 ffffffff8171961b 0000000000000000
Jul 17 20:01:52 mc kernel: [13498.025578] ffff8803da3cbc78 ffffffff8106757d ffff880403fa8000 ffff8803da3cbce8
Jul 17 20:01:52 mc kernel: [13498.025585] ffff880403810000 ffff8803c29fcec0 0000000000000002 ffff8803da3cbc88
Jul 17 20:01:52 mc kernel: [13498.025592] Call Trace:
Jul 17 20:01:52 mc kernel: [13498.025603] [<ffffffff8171961b>] dump_stack+0x45/0x56
Jul 17 20:01:52 mc kernel: [13498.025611] [<ffffffff8106757d>] warn_slowpath_common+0x7d/0xa0
Jul 17 20:01:52 mc kernel: [13498.025617] [<ffffffff8106765a>] warn_slowpath_null+0x1a/0x20
Jul 17 20:01:52 mc kernel: [13498.025625] [<ffffffff81576805>] xhci_find_new_dequeue_state+0xc5/0x320
Jul 17 20:01:52 mc kernel: [13498.025632] [<ffffffff8156e4fc>] xhci_cleanup_stalled_ring+0x6c/0x200
Jul 17 20:01:52 mc kernel: [13498.025639] [<ffffffff81575c3a>] ? queue_command+0x7a/0xd0
Jul 17 20:01:52 mc kernel: [13498.025646] [<ffffffff8156e7be>] xhci_endpoint_reset+0x12e/0x1a0
Jul 17 20:01:52 mc kernel: [13498.025655] [<ffffffff815419b5>] usb_hcd_reset_endpoint+0x25/0x70
Jul 17 20:01:52 mc kernel: [13498.025662] [<ffffffff815449b5>] usb_enable_endpoint+0x85/0x90
Jul 17 20:01:52 mc kernel: [13498.025669] [<ffffffff81544a02>] usb_enable_interface+0x42/0x60
Jul 17 20:01:52 mc kernel: [13498.025675] [<ffffffff81544c2f>] usb_set_interface+0x20f/0x360
Jul 17 20:01:52 mc kernel: [13498.025683] [<ffffffff8154ee2b>] usbdev_do_ioctl+0xa0b/0x1050
Jul 17 20:01:52 mc kernel: [13498.025689] [<ffffffff8154f49e>] usbdev_ioctl+0xe/0x20
Jul 17 20:01:52 mc kernel: [13498.025698] [<ffffffff811cfa00>] do_vfs_ioctl+0x2e0/0x4c0
Jul 17 20:01:52 mc kernel: [13498.025705] [<ffffffff8109db54>] ? vtime_account_user+0x54/0x60
Jul 17 20:01:52 mc kernel: [13498.025712] [<ffffffff811cfc61>] SyS_ioctl+0x81/0xa0
Jul 17 20:01:52 mc kernel: [13498.025719] [<ffffffff8172a23f>] tracesys+0xe1/0xe6
Jul 17 20:01:52 mc kernel: [13498.025723] ---[ end trace 86a964eabbfacb24 ]---
Jul 17 20:01:52 mc kernel: [13498.025727] FINDME slot_id = 1, ep_index = 2
Jul 17 20:01:52 mc kernel: [13498.025733] xhci_hcd 0000:00:14.0: WARN Cannot submit Set TR Deq Ptr
Jul 17 20:01:52 mc kernel: [13498.025738] xhci_hcd 0000:00:14.0: WARN deq seg = (null), deq pt = ffff880403fa8000
Jul 17 20:03:24 mc kernel: [13590.088556] xhci_hcd 0000:00:14.0: WARN Cannot submit Set TR Deq Ptr
Jul 17 20:03:24 mc kernel: [13590.088559] xhci_hcd 0000:00:14.0: A Set TR Deq Ptr command is pending.
Jul 17 20:03:29 mc kernel: [13595.411463] FINDME slot_id = 1, ep_index = 2
Jul 17 20:03:29 mc kernel: [13595.411472] xhci_hcd 0000:00:14.0: WARN Cannot submit Set TR Deq Ptr
Jul 17 20:03:29 mc kernel: [13595.411480] xhci_hcd 0000:00:14.0: A Set TR Deq Ptr command is pending.
Jul 17 20:03:34 mc kernel: [13600.759736] FINDME slot_id = 1, ep_index = 2
Jul 17 20:03:34 mc kernel: [13600.759741] xhci_hcd 0000:00:14.0: WARN Cannot submit Set TR Deq Ptr
Jul 17 20:03:34 mc kernel: [13600.759743] xhci_hcd 0000:00:14.0: A Set TR Deq Ptr command is pending.
Jul 17 20:03:39 mc kernel: [13605.588241] FINDME slot_id = 1, ep_index = 2
Jul 17 20:03:39 mc kernel: [13605.588251] xhci_hcd 0000:00:14.0: WARN Cannot submit Set TR Deq Ptr
Jul 17 20:03:39 mc kernel: [13605.588258] xhci_hcd 0000:00:14.0: A Set TR Deq Ptr command is pending.
Jul 17 20:03:44 mc kernel: [13610.374291] FINDME slot_id = 1, ep_index = 2
Jul 17 20:03:44 mc kernel: [13610.374294] xhci_hcd 0000:00:14.0: WARN Cannot submit Set TR Deq Ptr
Jul 17 20:03:44 mc kernel: [13610.374297] xhci_hcd 0000:00:14.0: A Set TR Deq Ptr command is pending.
Jul 17 20:03:49 mc kernel: [13615.563838] FINDME slot_id = 1, ep_index = 2
Wie zu sehen ist, kommt nur noch die Ausgabe vom Aufruf "WARN_ON(1);". Die Null-Tests waren alle negativ. Die Auskommentierung der Funktion "xhci_dbg_trace" hat allerdings den Kernel-Oops verhindert. Leider gibt es danach immer noch Probleme: Der Tuner ist nicht mehr benutzbar. Der Senderwechsel verursacht die Ausgabe:
Jul 17 20:03:44 mc kernel: [13610.374294] xhci_hcd 0000:00:14.0: WARN Cannot submit Set TR Deq Ptr
Jul 17 20:03:44 mc kernel: [13610.374297] xhci_hcd 0000:00:14.0: A Set TR Deq Ptr command is pending.
Jul 17 20:03:49 mc kernel: [13615.563838] FINDME slot_id = 1, ep_index = 2
Das Ziehen und Stecken des USB-Sticks am USB-Port bringt keine Besserung. Ebenfalls bringt das Neustarten von MythTV keine Besserung.