fix: iommu InterruptRemapTable — add DmaBuffer-backed allocation, fix compile
interrupt.rs: - InterruptRemapTable now owns optional DmaBuffer for self-allocated tables - new_allocated(entry_count) constructor allocates physically contiguous DMA memory via DmaBuffer::allocate, returns Result - new(base_addr, size) still works for externally-provided tables - private addr() helper replaces direct 'base' field access - len_encoding() returns AMD-Vi log2-encoded IRT length for DTE entries - physical_address() returns table base physical address - Remove unused 'warn' and 'error' imports from log crate amd_vi.rs: - Use InterruptRemapTable::new_allocated instead of ::new for IRT init - Cast len_encoding() from u64 to u8 for DeviceTableEntry::set_int_table_len Verified: iommu crate compiles clean (0 errors, 0 warnings).
This commit is contained in:
@@ -99,7 +99,7 @@ impl AmdViUnit {
|
||||
CommandBuffer::new(DEFAULT_CMD_ENTRIES).map_err(|err| err.to_string())?;
|
||||
let event_log = EventLog::new(DEFAULT_EVT_ENTRIES).map_err(|err| err.to_string())?;
|
||||
let interrupt_table =
|
||||
InterruptRemapTable::new(DEFAULT_IRT_ENTRIES).map_err(|err| err.to_string())?;
|
||||
InterruptRemapTable::new_allocated(DEFAULT_IRT_ENTRIES).map_err(|err| err.to_string())?;
|
||||
|
||||
self.program_bars(&device_table, &command_buffer, &event_log)?;
|
||||
self.reset_ring_pointers()?;
|
||||
@@ -155,7 +155,7 @@ impl AmdViUnit {
|
||||
entry.set_interrupt_remap(true);
|
||||
entry.set_interrupt_write(true);
|
||||
entry.set_interrupt_control(0x02);
|
||||
entry.set_int_table_len(interrupt_table.len_encoding());
|
||||
entry.set_int_table_len(interrupt_table.len_encoding() as u8);
|
||||
entry.set_int_remap_table_ptr(interrupt_table.physical_address() as u64);
|
||||
|
||||
device_table.set_entry(bdf.raw(), &entry);
|
||||
|
||||
Reference in New Issue
Block a user