Lưu ý
Mục đích của file này là để độc giả tiếng Việt có thể đọc và hiểu tài liệu nhân kernel dễ dàng hơn, không phải để tạo ra một nhánh tài liệu riêng. Nếu bạn có bất kỳ nhận xét hoặc cập nhật nào cho file này, vui lòng thử cập nhật file tiếng Anh gốc trước. Nếu bạn thấy có sự khác biệt giữa bản dịch và bản gốc, hoặc có vấn đề về bản dịch, vui lòng gửi góp ý hoặc patch cho người dịch của file này, hoặc nhờ người bảo trì và người review tài liệu tiếng Việt giúp đỡ.
- Bản gốc:
ARM Virtual Generic Interrupt Controller v3 and later (VGICv3)
- Người dịch:
Google Translate (machine translation)
- Phiên bản gốc:
8541d8f725c6
Cảnh báo
Tài liệu này được dịch tự động bằng máy và chưa được review bởi người dịch. Nội dung có thể không chính xác hoặc khó hiểu ở một số chỗ. Khi có sự khác biệt với bản gốc, bản gốc luôn là chuẩn. Bản dịch chất lượng cao (được review) được đặt trong thư mục vi_VN/.
Bộ điều khiển ngắt chung ảo ARM v3 trở lên (VGICv3)¶
- Các loại thiết bị được hỗ trợ:
Bộ điều khiển ngắt chung KVM_DEV_TYPE_ARM_VGIC_V3 ARM v3.0
Chỉ một phiên bản VGIC có thể được khởi tạo thông qua API này. VGIC đã tạo sẽ hoạt động như bộ điều khiển ngắt VM, yêu cầu các thiết bị trong không gian người dùng được mô phỏng để đưa các ngắt vào VGIC thay vì trực tiếp vào CPU. Nó không phải có thể tạo cả GICv3 và GICv2 trên cùng một VM.
Tạo thiết bị GICv3 khách yêu cầu máy chủ GICv3 hoặc máy chủ GICv5 có hỗ trợ cho FEAT_GCIE_LEGACY.
- Nhóm:
- KVM_DEV_ARM_VGIC_GRP_ADDR
Thuộc tính:
- KVM_VGIC_V3_ADDR_TYPE_DIST (rw, 64-bit)
Địa chỉ cơ sở trong không gian địa chỉ vật lý của khách của nhà phân phối GICv3 đăng ký bản đồ. Chỉ hợp lệ cho KVM_DEV_TYPE_ARM_VGIC_V3. Địa chỉ này cần được căn chỉnh 64K và vùng bao phủ 64 KByte.
- KVM_VGIC_V3_ADDR_TYPE_REDIST (rw, 64-bit)
Địa chỉ cơ sở trong không gian địa chỉ vật lý của khách của GICv3 ánh xạ đăng ký nhà phân phối lại. Có hai trang 64K cho mỗi trang VCPU và tất cả các trang của nhà phân phối lại đều liền kề nhau. Chỉ hợp lệ cho KVM_DEV_TYPE_ARM_VGIC_V3. Địa chỉ này cần được căn chỉnh 64K.
- KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION (rw, 64-bit)
Dữ liệu thuộc tính được trỏ đến bởi kvm_device_attr.addr là giá trị __u64:
- bit: ZZ0000ZZ 51 .... 16 ZZ0001ZZ11 - 0
giá trị: Chỉ số ZZ0003ZZ cơ sở ZZ0002ZZ
- chỉ mục mã hóa chỉ mục khu vực nhà phân phối lại duy nhất
cờ: dành riêng để sử dụng trong tương lai, hiện tại là 0
trường cơ sở mã hóa các bit [51:16] của địa chỉ cơ sở vật lý của khách là nhà phân phối lại đầu tiên trong khu vực.
count mã hóa số lượng nhà phân phối lại trong khu vực. Phải là lớn hơn 0.
- Có hai trang 64K cho mỗi nhà phân phối lại trong khu vực và
các nhà phân phối lại được bố trí liền kề trong khu vực. Khu vực chứa đầy các nhà phân phối lại theo thứ tự chỉ mục. Tổng của tất cả trường số vùng phải lớn hơn hoặc bằng số lượng VCPU. Các khu vực phân phối lại phải được đăng ký theo từng bước thứ tự chỉ số, bắt đầu từ chỉ số 0.
- Các đặc điểm của một khu vực phân phối lại cụ thể có thể được đọc
bằng cách đặt trước trường chỉ mục trong dữ liệu attr. Chỉ hợp lệ cho KVM_DEV_TYPE_ARM_VGIC_V3.
- Việc kết hợp các cuộc gọi với KVM_VGIC_V3_ADDR_TYPE_REDIST và
Thuộc tính KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION.
- Lưu ý rằng để có được kết quả có thể lặp lại (cùng VCPU được liên kết
với cùng một nhà phân phối lại trong quá trình lưu/khôi phục), tạo VCPU thứ tự, thứ tự tạo khu vực phân phối lại cũng như các thứ tự tương ứng các xen kẽ của VCPU và việc tạo vùng MUST được giữ nguyên. Bất kỳ thay đổi nào trong việc đặt hàng có thể dẫn đến liên kết vcpu_id/redistributor khác, dẫn đến máy ảo không chạy được vào thời điểm khôi phục.
Lỗi:
-ENXIO Việc lấy hoặc thiết lập thanh ghi này chưa được hỗ trợ -EBUSY Một hoặc nhiều VCPU đang chạy ====== ==========================================================
- KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS
Thuộc tính:
Trường attr của kvm_device_attr mã hóa hai giá trị:
- bit: ZZ0000ZZ 31 .... 16 ZZ0001ZZ
giá trị: ZZ0002ZZ RES ZZ0003ZZ
- Trường mpidr mã hóa ID CPU dựa trên thông tin về mối quan hệ trong
kiến trúc được xác định MPIDR và trường được mã hóa như sau:
- ZZ0000ZZ 55 .... 48 ZZ0001ZZ 39 .... 32 |
ZZ0002ZZ Aff2 ZZ0003ZZ Aff0 |
- Trường instr mã hóa thanh ghi hệ thống để truy cập dựa trên các trường
được xác định trong mã hóa tập lệnh A64 để truy cập thanh ghi hệ thống (RES có nghĩa là các bit được dành riêng để sử dụng trong tương lai và phải bằng 0):
- ZZ0000ZZ 13 ... 11 ZZ0001ZZ 6 ... 3 ZZ0002ZZ
ZZ0003ZZ Op1 ZZ0004ZZ CRm ZZ0005ZZ
- Tất cả các chế độ hệ thống được truy cập thông qua API này là (rw, 64-bit) và
kvm_device_attr.addr trỏ đến giá trị __u64.
- KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS truy cập các thanh ghi giao diện CPU cho
CPU được chỉ định bởi trường mpidr.
Các thanh ghi có sẵn là:
ICC_AP0R0_EL1 ICC_AP0R1_EL1 khi máy chủ thực hiện ít nhất 6 bit ưu tiên ICC_AP0R2_EL1 khi máy chủ thực hiện 7 bit ưu tiên ICC_AP0R3_EL1 khi máy chủ thực hiện 7 bit ưu tiên ICC_AP1R0_EL1 ICC_AP1R1_EL1 khi máy chủ thực hiện ít nhất 6 bit ưu tiên ICC_AP1R2_EL1 khi máy chủ thực hiện 7 bit ưu tiên ICC_AP1R3_EL1 khi máy chủ thực hiện 7 bit ưu tiên ICC_BPR1_EL1 ICC_CTLR_EL1 ICC_SRE_EL1 ICC_IGRPEN0_EL1 ICC_IGRPEN1_EL1 ========================================================================
Khi EL2 có sẵn cho khách, các sổ đăng ký này cũng có sẵn:
-ENXIO Nhận hoặc thiết lập thanh ghi này không được hỗ trợ -EBUSY VCPU đang chạy -EINVAL Giá trị đăng ký hoặc mpidr không hợp lệ được cung cấp ======= =======================================================
- KVM_DEV_ARM_VGIC_GRP_NR_IRQS
Thuộc tính:
- Một giá trị mô tả số lượng ngắt (SGI, PPI và SPI) cho
phiên bản GIC này, nằm trong khoảng từ 64 đến 1024, với số gia là 32.
kvm_device_attr.addr trỏ đến giá trị __u32.
Lỗi:
- -ENXIO VGIC không được cấu hình đúng theo yêu cầu trước khi gọi
thuộc tính này
-ENODEV không có VCPU trực tuyến -ENOMEM thiếu bộ nhớ khi cấp phát dữ liệu nội bộ vgic -EFAULT Truy cập ram khách không hợp lệ -EBUSY Một hoặc nhiều VCPUS đang chạy ======= ==============================================================
- KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO
Thuộc tính:
Trường attr của kvm_device_attr mã hóa các giá trị sau:
- bit: ZZ0000ZZ 31 .... 10 ZZ0001ZZ
giá trị: Thông tin ZZ0002ZZ ZZ0003ZZ
VINTID chỉ định tập hợp IRQ nào được báo cáo.
- Trường thông tin chỉ định không gian người dùng thông tin nào muốn nhận hoặc đặt
sử dụng giao diện này. Hiện tại chúng tôi hỗ trợ các giá trị thông tin sau:
- VGIC_LEVEL_INFO_LINE_LEVEL:
Nhận/Đặt mức đầu vào của dòng IRQ cho bộ 32 liên tục các ngắt được đánh số.
vINTID phải là bội số của 32.
- kvm_device_attr.addr trỏ đến giá trị __u32 sẽ chứa
bitmap trong đó bit được đặt có nghĩa là mức ngắt được xác nhận.
Bit[n] biểu thị trạng thái ngắt vINTID + n.
- SGI và bất kỳ ngắt nào có ID cao hơn số lượng ngắt
được hỗ trợ, sẽ là RAZ/WI. LPI luôn được kích hoạt ở biên và do đó không được hỗ trợ bởi giao diện này.
- PPI được báo cáo trên mỗi VCPU như được chỉ định trong trường mpidr và SPI là
được báo cáo với cùng một giá trị bất kể mpidr được chỉ định.
- Trường mpidr mã hóa ID CPU dựa trên thông tin về mối quan hệ trong
kiến trúc được xác định MPIDR và trường được mã hóa như sau:
- ZZ0000ZZ 55 .... 48 ZZ0001ZZ 39 .... 32 |
ZZ0002ZZ Aff2 ZZ0003ZZ Aff0 |
- Lỗi:
-EINVAL
- vINTID không phải là bội số của 32 hoặc trường thông tin là
không phải VGIC_LEVEL_INFO_LINE_LEVEL
- KVM_DEV_ARM_VGIC_GRP_MAINT_IRQ
Thuộc tính:
Trường attr của kvm_device_attr mã hóa các giá trị sau:
- bit: ZZ0000ZZ 4 .... 0 |
giá trị: ZZ0001ZZ vINTID |
- VINTID chỉ định ngắt nào được tạo khi vGIC
phải tạo ra một ngắt bảo trì. Đây phải là PPI.