Điểm:0

Bàn phím và chuột ngừng hoạt động với kernel Ubuntu-5.13.0-22.22-387-g0fc979747dec - xhci: Khắc phục tham nhũng con trỏ vòng lệnh trong khi hủy bỏ lệnh

lá cờ au

tl;dr:

  • Bàn phím và chuột không hoạt động với một số nhân nhất định.
  • Không yêu cầu một cách giải quyết, tôi đã có điều đó.
  • sử dụng chia đôi git, tôi đã xác định chính xác cam kết trong kho lưu trữ nhân Ubuntu nơi các thiết bị đầu vào của tôi ngừng hoạt động.
  • Tôi phải làm gì tiếp theo, với điều kiện là sự cố không xảy ra trong các nhân ngược dòng gần đây hơn?

Thiết bị đầu vào USB của tôi:

  • Bàn phím có dây Logitech G19
  • Chuột có dây Logitech G502
  • Bàn phím Sharkoon (rất cơ bản, không có đèn bàn phím, không có màn hình, không có nút phụ đặc biệt)

Phiên bản Ubuntu: 21.10

Chức năng bình thường (dự kiến):

  • Trong Grub:
    • Đèn bàn phím và chuột là trên
    • Đèn LED NumLock tắt và bật khi tôi nhấn phím NumLock nhiều lần
    • Bàn phím hoạt động (Tôi có thể sử dụng các phím mũi tên trong menu Grub)
  • Trong màn hình đăng nhập Gnome:
    • Đèn bàn phím và chuột là trên
    • Đèn LED NumLock tắt và bật khi tôi nhấn phím NumLock nhiều lần
    • Con trỏ chuột trên màn hình di chuyển khi tôi di chuyển chuột
    • Đánh máy hoạt động (tôi có thể nhập mật khẩu của mình trong màn hình đăng nhập)

Khi nó không hoạt động:

  • Trong Grub:
    • Đèn bàn phím và chuột là trên
    • Đèn LED NumLock tắt và bật khi tôi nhấn phím NumLock nhiều lần
    • Bàn phím hoạt động (Tôi có thể sử dụng các phím mũi tên trong menu Grub)
  • Trong màn hình đăng nhập Gnome:
    • Đèn bàn phím và chuột là tắt
    • Đèn LED NumLock tắt và tắt khi tôi nhấn phím NumLock nhiều lần
    • Con trỏ chuột trên màn hình không di chuyển khi tôi di chuyển chuột
    • Gõ không hoạt động

Với những điều trên, tôi có một kịch bản rất chắc chắn để kiểm tra xem một kernel nào đó có phù hợp với tôi hay không. Tôi đã cài đặt nhiều kernel khác nhau với 3 phương pháp:

  1. sử dụng đúng cách -> Nhân Ubuntu, có sẵn từ repo Ubuntu
  2. Sử dụng Trình cài đặt hạt nhân chính của Ubuntu -> kernel được biên dịch sẵn từ kernel.org.
  3. Sử dụng nhân Ubuntu tôi tự biên dịch từ git://kernel.ubuntu.com/ubuntu/ubuntu-impish.git. tôi đã sử dụng chia đôi git để kiểm tra các cam kết khác nhau và sau đó xây dựng từng cam kết đó, để tôi có thể tìm thấy cam kết chính xác nơi bàn phím và chuột ngừng hoạt động.
  • Hạt nhân làm việc, đã thử nghiệm:
    • 5.13.0-051300-chung (UKMI)
    • 5.13.0-19-chung (apt)
    • 5.13.0-20-chung (apt)
    • 5.13.0-21-chung (apt)
    • 5.13.0-22-chung (apt)
    • Ubuntu-5.13.0-22.22-0-g3ab15e228151 (đã biên dịch)
    • Ubuntu-5.13.0-22.22-317-g398351230dab (đã biên dịch)
    • Ubuntu-5.13.0-22.22-356-g8ac4e2604dae (đã biên dịch)
    • Ubuntu-5.13.0-22.22-376-gfab6fb5e61e1 (đã biên dịch)
    • Ubuntu-5.13.0-22.22-386-gce5ff9b36bc3 (đã biên dịch)
    • 5.16.11-051611-chung (UMKI)
  • Hạt nhân bị lỗi, đã kiểm tra:
    • Ubuntu-5.13.0-22.22-387-g0fc979747dec (đã biên dịch)
    • Ubuntu-5.13.0-22.22-388-gab2802ea6621 (đã biên dịch)
    • Ubuntu-5.13.0-22.22-391-ge24e59fa409c (đã biên dịch)
    • Ubuntu-5.13.0-22.22-396-gc3d35f3acc3a (đã biên dịch)
    • Ubuntu-5.13.0-22.22-475-g79b62d0bba89 (đã biên dịch)
    • Ubuntu-5.13.0-23.23-0-gb188ba567fc9 (đã biên dịch)
    • 5.13.0-23-chung (apt)
    • 5.13.0-25-chung (apt)
    • 5.13.0-27-chung (apt)
    • 5.13.0-28-chung (apt)
    • 5.13.0-30-chung (apt)

Kernel 5.13.0-22 là kernel Ubuntu mới nhất được cung cấp qua đúng cách phù hợp với tôi, vì vậy tôi đã ghim phiên bản đó để ngăn nó tự động nâng cấp.Làm thế nào tôi đã làm điều đó một cách chính xác, nằm ngoài phạm vi câu hỏi của tôi.

5.13.0-23 là nhân Ubuntu đầu tiên phá vỡ bàn phím và chuột đối với tôi, vì vậy tôi biết rằng cam kết phá vỡ nó, phải ở đâu đó trong khoảng từ 5.13.0-22 đến 5.13.0-23. tôi đã sử dụng chia đôi git để xác định cam kết chính xác và tôi đã tìm thấy nó. Điều này có nghĩa là chạy chia đôi git, biên dịch & cài đặt kernel, khởi động lại, kiểm tra xem thiết bị đầu vào có hoạt động không, rồi thực hiện git chia đôi tốt hoặc git chia đôi xấu, theo kết quả kiểm tra. Mỗi phần tổng hợp mất khoảng 22 phút, vì vậy bạn có thể tưởng tượng rằng tôi đã mất khá nhiều thời gian!

Cam kết chính xác nơi thiết bị đầu vào của tôi ngừng hoạt động là Ubuntu-5.13.0-22.22-387-g0fc979747dec. Nó chứa thay đổi này:

xhci: Khắc phục tham nhũng con trỏ vòng lệnh trong khi hủy bỏ lệnh

Liên kết lỗi: https://bugs.launchpad.net/bugs/1951880

cam kết ngược dòng ff0e50d3564f33b7f4b35cadeabd951d66cfc570.

Con trỏ vòng lệnh nằm ở bit [6:63] của lệnh
thanh ghi điều khiển vòng (CRCR). Tất cả các bit điều khiển như dừng lệnh,
hủy bỏ được đặt tại các bit [0:3]. Trong khi hủy bỏ một lệnh, chúng tôi đọc
CRCR và đặt bit hủy bỏ và ghi vào CRCR. Việc đọc sẽ luôn luôn
cung cấp cho con trỏ vòng lệnh là tất cả số không. Vì vậy, về cơ bản chúng tôi chỉ viết
các bit điều khiển. Vì chúng tôi chia phần ghi 64 bit thành hai phần ghi 32 bit,
có khả năng vòng lệnh xHC dừng trước cấp trên
dword (tất cả các số không) được viết. Nếu điều đó xảy ra, xHC cập nhật phần trên
dword của con trỏ vòng lệnh bên trong của nó với tất cả các số không. Lần tới,
khi vòng lệnh được khởi động lại, chúng tôi thấy lỗi truy cập bộ nhớ xHC.
Khắc phục sự cố này bằng cách chỉ ghi vào từ khóa thấp hơn của CRCR trong đó tất cả
các bit điều khiển được định vị.

ĐC: [email protected]
Người ký tắt: Pavankumar Kondeti <[email protected]>
Người ký tắt: Mathias Nyman <[email protected]>
Liên kết: https://lore.kernel.org/r/[email protected]
Người ký tắt: Greg Kroah-Hartman <[email protected]>
Người ký tắt: Kamal Mostafa <[email protected]>
Người ký tắt: Stefan Bader <[email protected]>


diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
chỉ số 5b54a36..5a96f3e 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -366,16 +366,22 @@ khoảng trống tĩnh xhci_handle_stopped_cmd_ring(struct xhci_hcd *xhci,
 /* Phải được gọi với xhci->lock holded, Releases and aquires lock back */
 int tĩnh xhci_abort_cmd_ring(struct xhci_hcd *xhci, cờ dài không dấu)
 {
- u64 tạm thời_64;
+ u32 temp_32;
    int ret;
 
    xhci_dbg(xhci, "Hủy vòng lệnh\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);
+ /*
+ * Các bit điều khiển như dừng lệnh, hủy lệnh được đặt ở phía dưới
+ * dword của thanh ghi điều khiển vòng lệnh. Hạn chế viết
+ * vào từ dưới để tránh làm hỏng con trỏ vòng lệnh
+ * trường hợp lệnh đổ chuông dừng trước thời gian trên dword
+ * được viết.
+ */
+ temp_32 = readl(&xhci->op_regs->cmd_ring);
+ writel(temp_32 | CMD_RING_ABORT, &xhci->op_regs->cmd_ring);
 
    /* Mục 4.6.1.2 của thông số kỹ thuật xHCI 1.0 cho biết phần mềm cũng nên đặt thời gian cho
     * hoàn thành thao tác Hủy lệnh. Nếu CRR không bị phủ định trong 5

liên kết lỗi bảng khởi chạy không mang lại bất cứ điều gì hữu ích, bởi vì nó không chỉ cụ thể về thay đổi này.

liên kết chuỗi email giữa Mathias Nyman, Pavan Kondeti và youling257 là về sự thay đổi này, tuy nhiên cuộc trò chuyện cứ lướt qua đầu tôi.

Mathias Nyman đã cập nhật bản vá của mình. Thay đổi ban đầu của anh ấy (có lỗi) đã có trong nhân Ubuntu, bản vá mà anh ấy đã sửa nó thì không. Bản vá từ Mathias Nyman nằm trong nhân chính như v5.16-rc3-1-g09f736aa9547, có nghĩa là nó được bao gồm trong 5.16 hạt nhân tuyến chính. Dựa theo https://kernel.ubuntu.com/, phiên bản Ubuntu tiếp theo, Jammy Jellyfish / 22.04 LTS, sẽ dựa trên phiên bản ngược dòng 5.15 kernel, mà tôi cho rằng có nghĩa là Ubuntu 22.04 LTS vẫn sẽ có bàn phím và chuột bị hỏng đối với tôi, trừ khi bản vá của Mathias Nyman được thêm vào nhân Ubuntu.

Tôi đã hỏi trên #ubuntu-kernel Kênh IRC, nhưng có thể tôi đã hỏi vào thời điểm không có nhiều người trực tuyến để xem câu hỏi của tôi. Hoặc có thể kênh đó không hoạt động nhiều, nếu tôi xem các tệp nhật ký.

Tôi đã báo cáo một lỗi trên Launchpad: https://bugs.launchpad.net/ubuntu/+source/linux/+orms/1963555

Tôi có thể/nên làm gì khác không?

Someone avatar
lá cờ my
*kiểm soát giọng điệu khá chặt chẽ*: Vui lòng đọc [Quy tắc ứng xử](https://askubuntu.com/conduct) của chúng tôi.
Amedee Van Gasse avatar
lá cờ au
Tôi không hiểu nhận xét của bạn. Tôi không thể thấy nó áp dụng như thế nào cho vấn đề trong câu hỏi của tôi. Có lẽ vì tôi không phải là người nói tiếng Anh bản ngữ, nên có thể có rào cản ngôn ngữ.
Someone avatar
lá cờ my
@AnedeeVanGasse Nhận xét trước của tôi không đề cập đến vấn đề/câu hỏi của bạn, nó đề cập đến nhận xét trước đó mà bạn đã xóa. một trong đó nói rằng "khá chính sách giai điệu". Tôi cũng không phải là người nói tiếng Anh bản ngữ.
David avatar
lá cờ cn
Bạn không cần báo cáo lỗi trên nhân cũ, đó là lý do tại sao có nhân mới. Ngoài ra, nó có thể hoàn toàn không phải là lỗi mà là sự cố với phần cứng CỦA BẠN.
Amedee Van Gasse avatar
lá cờ au
@David vui lòng kiểm tra cam kết `v5.16-rc3-1-g09f736aa9547` trong kernel ngược dòng từ kernel.org. Nó sửa một lỗi đã xuất hiện trong `v5.15-rc5-4-gff0e50d3564f`. _"Hóa ra một số bộ điều khiển xHC yêu cầu ghi tất cả 64 bit trong thanh ghi CRCR để thực thi lệnh hủy bỏ."_ -> Tôi bị ảnh hưởng. Bản phát hành Ubuntu 22.04 sắp tới sẽ sử dụng kernel 5.15, có nghĩa là nó sẽ không tự động bao gồm bản sửa lỗi kernel mà tôi cần. Đúng không?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.