Tóm tắt nhanh
- Nhân Linux 7.3 có bản vá riêng cho Samsung 990 PRO (mã PCI 144d:a80c) và 990 EVO Plus (144d:a80d): kernel bỏ qua cờ “Immediate Readiness” mà hai ổ này đang quảng cáo.
- Theo Phoronix, ổ 990 PRO trả về toàn bit 1 trong tối đa 7 ms sau khi nhận lệnh Function Level Reset. Trong khoảng đó, việc khôi phục cấu hình bị hỏng và VFIO passthrough sang máy ảo không hoạt động.
- Lỗi bị lộ sau một thay đổi trong Linux 7.2, khi kernel bỏ lớp thử lại khi khôi phục BAR. Lớp đó trước đây vô tình che lỗi của ổ.
- Người dùng máy để bàn thông thường không chạm tới đường FLR này. Ai chạy máy ảo có gắn trực tiếp ổ thì cần Linux 7.3 hoặc một bước đổi thủ công.
Samsung 990 PRO và 990 EVO Plus là hai ổ NVMe PCIe 4.0 phổ biến của Samsung trên máy để bàn. Bản vá vừa vào nhánh Linux 7.3 cho thấy một chuyện khác: có lúc phần cứng quảng cáo một tính năng mà nó chưa làm đúng, và phần mềm chỉ phát hiện khi có ai đó dọn dẹp mã.
Cờ Immediate Readiness hứa điều gì, và ổ không làm được gì?

PCIe 4.0 có một bit tên Immediate Readiness. Thiết bị bật bit này để báo với hệ điều hành rằng sau khi reset, nó có thể trả lời yêu cầu cấu hình ngay, không cần chờ theo thời gian mặc định. 990 PRO bật cờ này. Theo mô tả trong commit của bản vá, sau Function Level Reset ổ trả về toàn bit 1 trong tối đa 7 ms, tức là trong khoảng đó chưa có gì phản hồi.
Kernel tin lời quảng cáo nên không chờ, và bắt đầu đọc cấu hình khi ổ vẫn chưa sẵn sàng. Lỗi tương tự được ghi nhận trên 990 EVO Plus (144d:a80d) với firmware 2B2QKXG7, theo ghi chú của Bjorn Helgaas trong cùng bản vá.
Firmware quyết định ổ có trả lời kịp hay không
Lỗi không đồng đều giữa các phiên bản firmware. Số liệu dưới đây lấy từ hai nguồn đã đối chiếu.
| Ổ | Mã PCI | Firmware | Phản hồi sau FLR |
|---|---|---|---|
| Samsung 990 PRO | 144d:a80c | 1B2QJXD7 | Chưa phản hồi trong khoảng 7 ms |
| Samsung 990 PRO | 144d:a80c | 8B2QJXD7 | Phản hồi ngay |
| Samsung 990 EVO Plus | 144d:a80d | 2B2QKXG7 | Gặp lỗi tương tự |
Số liệu: Phoronix, Hardware Busters
Kernel không đọc được phiên bản firmware ở giai đoạn này, nên bản vá áp cho mọi 990 PRO. Trong luồng thảo luận trên diễn đàn Arch Linux, người viết bản vá đã cập nhật firmware và tự sửa được ổ của mình. Với 990 EVO Plus thì khác: một người dùng trong cùng luồng đã chạy firmware mới nhất và vẫn bị ảnh hưởng, nên không có lối firmware chắc chắn cho dòng này.
Vì sao một bước dọn mã lại làm lộ lỗi này?
Từ năm 2012, Linux thử khôi phục BAR của thiết bị tối đa 10 lần sau reset. Khi đó kernel chỉ chờ 100 ms, nên lớp thử lại này là một lưới an toàn có ích. Tháng 5 năm nay, Lukas Wunner gỡ các lần thử lại vì cho rằng kernel hiện chờ tới 60 giây để thiết bị ra khỏi trạng thái reset. Lập luận đúng, trừ khi thiết bị tự khai rằng nó không cần chờ. Thay đổi này có mặt trong Linux 7.2, và trên hai ổ Samsung, việc khôi phục cấu hình sau FLR bị mất.
Có thể hiểu thế này: lớp thử lại cũ đã che một lời quảng cáo sai của ổ. Khi lớp đó biến mất, lời quảng cáo sai mới lộ ra. Lỗi nằm ở firmware và cờ phần cứng, không nằm ở thay đổi trong 7.2. Thay đổi 7.2 chỉ là lần đầu tiên nó gây hại.
Ai thật sự cần lo?
Driver vfio-pci thực hiện FLR mỗi khi máy ảo khởi động. Vì vậy lỗi chỉ xuất hiện khi ổ được gắn trực tiếp cho một máy ảo. Với người dùng bình thường, ổ không thấy FLR trong lúc làm việc, và các nguồn đã đọc không ghi nhận rủi ro mất dữ liệu trong sử dụng thường ngày.
Trường hợp điển hình được ghi trên diễn đàn Arch Linux từ ngày 6/9: một máy Ryzen 9 9900X chạy Windows 11 trong libvirt, có RTX 4070 Super và ổ 990 EVO Plus 2TB gắn cho máy ảo. Sau khi nâng lên kernel 7.2.2, GPU vẫn chạy nhưng ổ thì không, và libvirt báo lỗi “Unknown PCI header type ‘127’” khi reset. Hạ về 7.1.9 thì lỗi biến mất.
Bản vá làm gì, và trước khi có bản phân phối mới thì xử lý thế nào?
Bản vá dài khoảng 12 dòng trong file PCI quirks. Nếu ổ khớp mã Samsung và quảng cáo Immediate Readiness, kernel xóa cờ đó, ghi một dòng log rồi chờ sau reset như với mọi thiết bị khác. Bản vá cũng có thẻ Fixes trỏ về thay đổi trong 7.2, nên có khả năng được đưa vào nhánh stable 7.2.
Các bản phân phối chưa có Linux 7.3 có hai lối tạm. Lối thứ nhất là đổi reset_method của ổ sang bus reset qua sysfs trước khi bật máy ảo, nhưng cài đặt này mất sau khi khởi động lại. Lối thứ hai là không đưa controller cho máy ảo mà chỉ đưa ổ dưới dạng block device, đổi lại hiệu năng thấp hơn.
Người mua ổ ở Việt Nam cần đổi gì?
Samsung 990 PRO 1TB đang được bán tại CellphoneS với giá 8.990.000 đồng theo trang sản phẩm của đơn vị bán lẻ. Với nhu cầu lưu trữ và chơi game trên máy để bàn, lỗi này không làm thay đổi lựa chọn mua. Lỗi chỉ đáng cân nhắc khi bạn định dùng ổ cho máy ảo có passthrough: chọn bản kernel có 7.3 hoặc chuẩn bị một lối tạm. Với 990 EVO Plus, nên cân nhắc kỹ hơn vì chưa có đường firmware rõ ràng.
Những điểm còn chưa rõ
- Trong các nguồn đã đọc chưa có phản hồi chính thức từ Samsung, cũng chưa có bản firmware nào được nêu là đã sửa hành vi này.
- Chưa rõ 990 EVO Plus có những phiên bản firmware nào khác bị ảnh hưởng.
- Các nguồn không có số đo hiệu năng trước và sau bản vá. Bản vá đổi cách kernel đối xử với ổ, không đổi phần cứng.
Kết luận
Lỗi lần này không làm hỏng ổ, nhưng nhắc một điều: một tính năng PCIe được quảng cáo chưa chắc đã hoạt động đúng. Kernel đã đổi cách tin ổ. Người chạy máy ảo nên cập nhật lên 7.3 khi bản phân phối của họ có sẵn; người dùng còn lại không cần làm gì.
Nguồn tham khảo: Phoronix, Hardware Busters, CellphoneS







