bật / tắt các ngắt PCI


8

Tôi đang triển khai trình điều khiển PCIe và tôi muốn hiểu ở mức độ nào các ngắt có thể được bật hoặc tắt. Tôi cố tình không chỉ định HĐH, vì tôi cho rằng nó phải phù hợp với mọi nền tảng. Theo cấp độ tôi có nghĩa là như sau:

  • Hệ điều hành ngắt cụ thể của hệ điều hành
  • Ngắt có thể bị vô hiệu hóa hoặc kích hoạt trong các thanh ghi không gian cấu hình PCI / PCIe, ví dụ như thanh ghi điều khiển
  • Các ngắt cũng có thể được che dấu ở cấp thiết bị, ví dụ chúng ta có thể định cấu hình thiết bị không kích hoạt một số ngắt nhất định đến máy chủ

Tôi hiểu rằng bất kỳ loại ngắt nào đang được sử dụng trên PCIe (mô phỏng INTx, MSI hoặc MSI-X), nó phải được gửi đến HĐH máy chủ.

Vì vậy, câu hỏi của tôi là - chúng ta thực sự phải kích hoạt hoặc vô hiệu hóa các ngắt trên mọi lớp, hay nó chỉ đủ ở phần cứng gần nhất, ví dụ như trong các thanh ghi PCI có liên quan?


1
Trong trình điều khiển KMDF của Windows, bạn chỉ định trong tệp .inf trình điều khiển loại sử dụng (MSI vs INTx vs MSI-x) và khung trình điều khiển sẽ tự cấu hình chính xác không gian cấu hình PCIe khi tải. Tôi không biết về các HĐH khác, nhưng vì .inf là Windows cụ thể nên tôi nghĩ có lẽ nó phụ thuộc vào HĐH.
Tom Carpenter

2
Bạn thường phải kích hoạt chúng bằng cách cung cấp cấu hình cho những gì nên được thực hiện với ngắt. Khi việc vô hiệu hóa được thực hiện trên CPU chỉ trong một thời gian ngắn của điện toán không bị gián đoạn, cho đến khi bạn định cấu hình thiết bị (ví dụ để tiết kiệm năng lượng)
pjc50

1
NẾU bạn đang sử dụng linux, bạn có thể sử dụng khung DMA cho ứng dụng của mình không? Nó rất hay, bạn tạo giao dịch và nó trả về với thời gian chờ tùy chọn khi giao dịch hoàn tất - bạn không phải đánh lừa với sự gián đoạn thực tế
johnnymopo

@ pjc50, nếu trình điều khiển chọn sử dụng một loại ngắt nhất định, ví dụ INTx, nó có phải vô hiệu hóa phân phối MSI / MSI-X qua các thanh ghi pci MSI_CAP không? (Và cách khác - vô hiệu hóa INTx khi sử dụng MSI)
Đánh dấu

Câu trả lời:


1

Các hệ điều hành thường phàn nàn lớn về các gián đoạn bất ngờ, bởi vì đây là những lỗi lập trình dễ phát hiện trong trình điều khiển.

Thông thường, phần cứng của bạn sẽ bắt đầu ở một số trạng thái trơ khá sau khi đặt lại, nơi nó chờ được cấu hình. Ở trạng thái này, không có cách nào có ý nghĩa để tạo ra một ngắt, bởi vì chưa có ánh xạ nào được thiết lập và bạn không biết ngắt nào.

Trong quá trình cấu hình, ánh xạ ngắt xuất hiện và thẻ được cho biết nên sử dụng dòng ngắt nào (INTA..INTD làm PCI kế thừa hoặc MSI / MSI-X), nhưng vẫn chưa có trình điều khiển để xử lý các ngắt. Linux có một trình xử lý mặc định ở đây phàn nàn với nhật ký hệ thống và sau đó vô hiệu hóa nguồn ngắt, vì phần cứng dường như bị lỗi (tức là theo mặc định, tất cả các ngắt đều được kích hoạt, nhưng chỉ những trình xử lý được đăng ký mới thực sự xảy ra) .

Trình điều khiển cuối cùng đăng ký các trình xử lý ngắt và cho phép các ngắt mà nó quan tâm. Nếu trình điều khiển không còn quan tâm đến một điều kiện cụ thể, thì nó cần phải vô hiệu hóa ngắt trong thiết bị, vì đó là nguyên nhân gây ra sự gián đoạn cụ thể của thiết bị - các lớp thấp hơn chỉ biết rằng "một cái gì đó đã xảy ra".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.