Puncte:0

Tastatura și mouse-ul nu mai funcționează cu nucleul Ubuntu-5.13.0-22.22-387-g0fc979747dec - xhci: Remediați corupția indicatorului inelului de comandă în timp ce anulați o comandă

drapel au

tl;dr:

  • Tastatura și mouse-ul nu funcționează cu anumite nuclee.
  • Nu cer o soluție, o am deja.
  • Folosind git bisect, am identificat commit-ul exact în depozitul de kernel Ubuntu unde dispozitivele mele de intrare nu mai funcționează.
  • Ce fac în continuare, având în vedere că ruperea nu are loc în nucleele mai recente din amonte?

Dispozitivele mele de intrare USB:

  • Tastatură cu fir Logitech G19
  • Mouse cu fir Logitech G502
  • Tastatură Sharkoon (foarte de bază, fără iluminare a tastaturii, fără afișaj, fără butoane suplimentare speciale)

Versiunea Ubuntu: 21.10

Funcționalitate normală (așteptată):

  • În Grub:
    • Luminile pentru tastatură și mouse sunt pe
    • LED-ul NumLock se stinge și se aprinde când apăs în mod repetat tasta NumLock
    • Tastatura funcționează (pot folosi tastele săgeți în meniul Grub)
  • În ecranul de conectare Gnome:
    • Luminile pentru tastatură și mouse sunt pe
    • LED-ul NumLock se stinge și se aprinde când apăs în mod repetat tasta NumLock
    • Indicatorul mouse-ului pe ecran mișcări când mișc mouse-ul
    • Tastarea funcționează (îmi pot introduce parola în ecranul de conectare)

Când nu funcționează:

  • În Grub:
    • Luminile pentru tastatură și mouse sunt pe
    • LED-ul NumLock se stinge și se aprinde când apăs în mod repetat tasta NumLock
    • Tastatura funcționează (pot folosi tastele săgeți în meniul Grub)
  • În ecranul de conectare Gnome:
    • Luminile pentru tastatură și mouse sunt oprit
    • LED-ul NumLock este stins și rămâne stins când apăs în mod repetat tasta NumLock
    • Indicatorul mouse-ului pe ecran nu se mișcă când mișc mouse-ul
    • Tastarea nu funcționează

Cu cele de mai sus, am un scenariu foarte solid pentru a testa dacă un anumit nucleu funcționează pentru mine sau nu. Am instalat diverse nuclee cu 3 metode:

  1. Folosind apt -> Nuclee Ubuntu, disponibile din depozitul Ubuntu
  2. Folosind Ubuntu Mainline Kernel Installer -> nuclee pre-compilate de la kernel.org.
  3. Folosind nucleele Ubuntu din care m-am compilat git://kernel.ubuntu.com/ubuntu/ubuntu-impish.git. obisnuiam git bisect pentru a verifica diferite comiteri și apoi a construi fiecare dintre acestea, astfel încât să pot găsi comiterea exactă în care tastatura și mouse-ul nu mai funcționează.
  • Miezuri de lucru, testate:
    • 5.13.0-051300-generic (UKMI)
    • 5.13.0-19-generic (apt)
    • 5.13.0-20-generic (apt)
    • 5.13.0-21-generic (apt)
    • 5.13.0-22-generic (apt)
    • Ubuntu-5.13.0-22.22-0-g3ab15e228151 (compilat)
    • Ubuntu-5.13.0-22.22-317-g398351230dab (compilat)
    • Ubuntu-5.13.0-22.22-356-g8ac4e2604dae (compilat)
    • Ubuntu-5.13.0-22.22-376-gfab6fb5e61e1 (compilat)
    • Ubuntu-5.13.0-22.22-386-gce5ff9b36bc3 (compilat)
    • 5.16.11-051611-generic (UMKI)
  • Nuezele eșuate, testate:
    • Ubuntu-5.13.0-22.22-387-g0fc979747dec (compilat)
    • Ubuntu-5.13.0-22.22-388-gab2802ea6621 (compilat)
    • Ubuntu-5.13.0-22.22-391-ge24e59fa409c (compilat)
    • Ubuntu-5.13.0-22.22-396-gc3d35f3acc3a (compilat)
    • Ubuntu-5.13.0-22.22-475-g79b62d0bba89 (compilat)
    • Ubuntu-5.13.0-23.23-0-gb188ba567fc9 (compilat)
    • 5.13.0-23-generic (apt)
    • 5.13.0-25-generic (apt)
    • 5.13.0-27-generic (apt)
    • 5.13.0-28-generic (apt)
    • 5.13.0-30-generic (apt)

Kernel 5.13.0-22 este cel mai recent kernel Ubuntu furnizat prin apt asta funcționează pentru mine, așa că am fixat acea versiune pentru a preveni upgrade-urile automate.Cum am făcut exact asta, este în afara domeniului de aplicare al întrebării mele.

5.13.0-23 este primul kernel Ubuntu care sparge tastatura și mouse-ul pentru mine, așa că știu că commit-ul care îl întrerupe trebuie să fie undeva între 5.13.0-22 și 5.13.0-23. obisnuiam git bisect pentru a identifica comiterea exactă și l-am găsit. Asta însemna să alergi git bisect, compilarea și instalarea nucleului, repornirea, testarea dacă dispozitivele de intrare funcționează și apoi face git bisect good sau git bisect rău, conform rezultatului testului. Fiecare compilație a durat aproximativ 22 de minute, așa că vă puteți imagina că mi-a luat destul de mult timp!

Comiterea exactă în care dispozitivele mele de intrare nu mai funcționează este Ubuntu-5.13.0-22.22-387-g0fc979747dec. Conține această modificare:

xhci: Remediați corupția indicatorului inelului de comandă în timp ce anulați o comandă

BugLink: https://bugs.launchpad.net/bugs/1951880

comite ff0e50d3564f33b7f4b35cadeabd951d66cfc570 în amonte.

Indicatorul inelului de comandă este situat la [6:63] biți ai comenzii
registru de control inel (CRCR). Toți biții de control, cum ar fi comanda oprire,
abort sunt situate la [0:3] biți. În timp ce anulăm o comandă, citim
CRCR și setați bitul de anulare și scrieți în CRCR. Citirea va fi mereu
dați indicatorul inelului de comandă ca toate zerourile. Deci, în esență, scriem doar
biţii de control. Deoarece am împărțit scrierea pe 64 de biți în două scrieri pe 32 de biți,
există posibilitatea ca inelul de comandă xHC să se oprească înainte de partea superioară
dword (toate zerourile) este scris. Dacă se întâmplă acest lucru, xHC actualizează partea superioară
dword a indicatorului său de inel de comandă intern cu toate zerourile. Data viitoare,
când inelul de comandă este repornit, vedem erori de acces la memoria xHC.
Remediați această problemă scriind doar în dword inferior al CRCR, unde toate
sunt localizați biții de control.

Cc: [email protected]
Semnat de: Pavankumar Kondeti <[email protected]>
Semnat de: Mathias Nyman <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Semnat de: Greg Kroah-Hartman <[email protected]>
Semnat de: Kamal Mostafa <[email protected]>
Semnat de: Stefan Bader <[email protected]>


diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
indice 5b54a36..5a96f3e 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -366,16 +366,22 @@ static void xhci_handle_stopped_cmd_ring(struct xhci_hcd *xhci,
 /* Trebuie apelat cu xhci->lock deținut, eliberează și dobândește blocarea înapoi */
 static int xhci_abort_cmd_ring(struct xhci_hcd *xhci, steaguri lungi nesemnate)
 {
- u64 temp_64;
+ u32 temp_32;
    int ret;
 
    xhci_dbg(xhci, „Anulați inelul de comandă\n”);
 
    reinit_completion(&xhci->cmd_ring_stop_completion);
 
- temp_64 = xhci_read_64(xhci, &xhci->op_regs->cmd_ring);
- xhci_write_64(xhci, temp_64 | CMD_RING_ABORT,
- &xhci->op_regs->cmd_ring);
+ /*
+ * Biții de control, cum ar fi comanda stop, abort sunt localizați în partea inferioară
+ * dword al registrului de control al inelului de comandă. Limitați scrierea
+ * la dword inferior pentru a evita coruperea indicatorului inelului de comandă
+ * în cazul în care inelul de comandă este oprit până la ora dword superioară
+ * este scris.
+ */
+ temp_32 = readl(&xhci->op_regs->cmd_ring);
+ writel(temp_32 | CMD_RING_ABORT, &xhci->op_regs->cmd_ring);
 
    /* Secțiunea 4.6.1.2 din specificațiile xHCI 1.0 spune că software-ul ar trebui, de asemenea,
     * finalizarea operațiunii Command Abort. Dacă CRR nu este negat în 5

Cel legat Eroare Launchpad nu aduce nimic util, deoarece nu este vorba doar despre această schimbare.

Cel legat fir de e-mail între Mathias Nyman, Pavan Kondeti și youling257 este vorba despre această schimbare, totuși conversația îmi trece peste cap.

Mathias Nyman a făcut o actualizare la patch-ul său. Schimbarea sa inițială (cu o eroare) este deja în nucleul Ubuntu, patch-ul în care a remediat-o, nu este. Patch-ul de la Mathias Nyman este în nucleul principal ca v5.16-rc3-1-g09f736aa9547, ceea ce înseamnă că este inclus în 5.16 nucleul principal. Conform https://kernel.ubuntu.com/, următoarea versiune Ubuntu, Jammy Jellyfish / 22.04 LTS, se va baza pe upstream 5.15 kernel, care presupun că înseamnă că Ubuntu 22.04 LTS va avea în continuare o tastatură și un mouse stricate pentru mine, cu excepția cazului în care patch-ul lui Mathias Nyman este adăugat la nucleul Ubuntu.

Am întrebat pe #ubuntu-kernel Canal IRC, dar poate că am întrebat într-un moment în care nu mulți oameni erau online să-mi vadă întrebarea. Sau poate că acel canal pur și simplu nu este foarte activ, dacă mă uit la fișierele jurnal.

Am raportat o eroare pe Launchpad: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1963555

Mai pot/ar trebui să fac altceva?

Someone avatar
drapel my
*poliție destul de ton*: Vă rugăm să citiți [Codul nostru de conduită](https://askubuntu.com/conduct).
Amedee Van Gasse avatar
drapel au
Întâmpin probleme în a înțelege comentariul tău. Nu pot vedea cum se aplică problemei din întrebarea mea. Poate pentru că nu sunt vorbitor nativ de engleză, ar putea exista o barieră lingvistică.
Someone avatar
drapel my
@AnedeeVanGasse Comentariul meu anterior nu se referă la problema/întrebarea dvs., ci se referă la comentariul dvs. anterior, pe care l-ați șters. cel care spunea „destul de tonul poliției”. Nici eu nu sunt vorbitor nativ de engleză.
David avatar
drapel cn
Nu trebuie să raportați o eroare pe un nucleu vechi, de aceea există nuclee noi. De asemenea, s-ar putea să nu fie deloc o eroare, ci o problemă cu hardware-ul DVS.
Amedee Van Gasse avatar
drapel au
@David, vă rugăm să verificați commit `v5.16-rc3-1-g09f736aa9547` în nucleul din amonte de la kernel.org. Remediază o eroare care a fost introdusă în `v5.15-rc5-4-gff0e50d3564f`. _"Se pare că unele controlere xHC necesită ca toți cei 64 de biți din registrul CRCR să fie scrieți pentru a executa o renunțare a comenzii."_ --> Sunt afectat. Următoarea lansare Ubuntu 22.04 va folosi kernel-ul 5.15, ceea ce înseamnă că nu va include automat remedierea kernel-ului de care am nevoie. Este corect?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.