Skip to content

Commit 5f7734b

Browse files
committed
chore(ci): fix fmt, lockfile and clippy warnings
Signed-off-by: Zewei Yang <yangzewei@loongson.cn>
1 parent c6d3842 commit 5f7734b

12 files changed

Lines changed: 314 additions & 230 deletions

File tree

Cargo.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/arch/src/loongarch64/linux/iocsr.rs

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
1+
use log::debug;
2+
use std::sync::atomic::{AtomicU64, Ordering};
13
/// LoongArch IOCSR Mailbox and Control Registers
24
///
35
/// This module provides emulation for LoongArch IOCSR (I/O Control and Status Register)
46
/// mailbox system used for inter-processor communication.
5-
67
use std::sync::Arc;
7-
use std::sync::atomic::{AtomicU64, Ordering};
8-
use log::debug;
98

109
/// Maximum Number of LoongArch vCpus supported
11-
const MAX_LOONGARCH_VCPUS: usize = 16;
10+
const MAX_LOONGARCH_VCPUS: usize = 16;
1211

1312
/// IOCSR Mailbox addresses (each 8 bytes apart)
1413
pub const LOONGARCH_IOCSR_MBUF0: u64 = 0x1020;
1514
pub const LOONGARCH_IOCSR_MBUF1: u64 = 0x1028;
1615
pub const LOONGARCH_IOCSR_MBUF2: u64 = 0x1030;
1716
pub const LOONGARCH_IOCSR_MBUF3: u64 = 0x1038;
1817

19-
2018
/// IOCSR Mailbox send command register
2119
pub const LOONGARCH_IOCSR_MBUF_SEND: u64 = 0x1048;
2220

@@ -61,12 +59,14 @@ impl LoongArchIocsrState {
6159
Self {
6260
misc_func: AtomicU64::new(0),
6361
mailboxes: (0..count)
64-
.map(|_| [
65-
AtomicU64::new(0),
66-
AtomicU64::new(0),
67-
AtomicU64::new(0),
68-
AtomicU64::new(0),
69-
])
62+
.map(|_| {
63+
[
64+
AtomicU64::new(0),
65+
AtomicU64::new(0),
66+
AtomicU64::new(0),
67+
AtomicU64::new(0),
68+
]
69+
})
7070
.collect(),
7171
}
7272
}
@@ -100,6 +100,7 @@ impl LoongArchIocsrState {
100100
/// Process a mailbox send command
101101
///
102102
/// This function parses the MBUF_SEND register value and updates the target CPU's mailbox.
103+
/// Currently used only for SMP support, which is disabled in single-vCPU mode.
103104
///
104105
/// # Arguments
105106
/// * `value` - The 64-bit value written to MBUF_SEND register
@@ -113,13 +114,21 @@ impl LoongArchIocsrState {
113114
pub fn process_mbuf_send(&self, value: u64) -> Result<(), String> {
114115
// Extract fields from the value
115116
let target_cpu = ((value >> IOCSR_MBUF_SEND_CPU_SHIFT) & 0x3FFF) as usize;
116-
let box_hi = ((value >> 3) & 1) != 0;
117-
let box_lo = ((value >> 2) & 1) != 0;
118-
let box_num = (box_lo as u32) ^ (box_hi as u32);
117+
// Linux encodes mailbox selector as:
118+
// (IOCSR_MBUF_SEND_BOX_{LO,HI}(box) << IOCSR_MBUF_SEND_BOX_SHIFT)
119+
// where BOX_LO(box)=(box<<1), BOX_HI(box)=((box<<1)+1).
120+
// So the packed field is 3 bits: [box_num(2b), hi_low(1b)].
121+
let box_sel = ((value >> IOCSR_MBUF_SEND_BOX_SHIFT) & 0x7) as u32;
122+
let box_hi = (box_sel & 0x1) != 0;
123+
let box_num = (box_sel >> 1) as usize;
119124
let data32 = ((value >> IOCSR_MBUF_SEND_BUF_SHIFT) & 0xFFFFFFFF) as u32;
120125
// Validate target CPU
121126
if target_cpu >= self.mailboxes.len() {
122-
return Err(format!("Invalid target CPU: {} (max: {})", target_cpu, self.mailboxes.len() - 1));
127+
return Err(format!(
128+
"Invalid target CPU: {} (max: {})",
129+
target_cpu,
130+
self.mailboxes.len() - 1
131+
));
123132
}
124133
// Validate mailbox number
125134
if box_num >= 4 {
@@ -128,14 +137,14 @@ impl LoongArchIocsrState {
128137
// Update the target mailbox
129138
if box_hi {
130139
// Write high 32 bits
131-
let current = self.read_mailbox(target_cpu, box_num as usize);
140+
let current = self.read_mailbox(target_cpu, box_num);
132141
let new_val = (current & 0xFFFFFFFF) | ((data32 as u64) << 32);
133-
self.write_mailbox(target_cpu, box_num as usize, new_val);
142+
self.write_mailbox(target_cpu, box_num, new_val);
134143
} else {
135144
// Write low 32 bits
136-
let current = self.read_mailbox(target_cpu, box_num as usize);
145+
let current = self.read_mailbox(target_cpu, box_num);
137146
let new_val = (current & 0xFFFFFFFF00000000) | (data32 as u64);
138-
self.write_mailbox(target_cpu, box_num as usize, new_val);
147+
self.write_mailbox(target_cpu, box_num, new_val);
139148
}
140149
Ok(())
141150
}
@@ -168,7 +177,8 @@ pub fn process_iocsr_read(
168177
addr: u64,
169178
data: &mut [u8],
170179
iocsr_state: &Arc<LoongArchIocsrState>,
171-
cpu_id: u8) -> IocsrReadResult {
180+
cpu_id: u8,
181+
) -> IocsrReadResult {
172182
match (addr, data.len()) {
173183
(LOONGARCH_IOCSR_FEATURES, 4) => {
174184
// Feature flags: EXTIOI, CSRIPI, VM support
@@ -208,7 +218,8 @@ pub fn process_iocsr_write(
208218
addr: u64,
209219
data: &[u8],
210220
iocsr_state: &Arc<LoongArchIocsrState>,
211-
cpu_id: u8) -> IocsrWriteResult {
221+
cpu_id: u8,
222+
) -> IocsrWriteResult {
212223
match (addr, data.len()) {
213224
(LOONGARCH_IOCSR_MISC_FUNC, 8) => {
214225
// Miscellaneous function register
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
pub mod efi;
2+
pub mod iocsr;
23
pub mod regs;
3-
pub mod iocsr;

src/arch/src/loongarch64/linux/regs.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ const CPUCFG3_KVM_CONSERVATIVE_MASK: u64 = 0x0000_fcff;
3131
const CPUCFG4_KVM_MASK: u64 = 0xffff_ffff;
3232
const CPUCFG5_KVM_MASK: u64 = 0xffff_ffff;
3333

34-
const CPUCFG16_CACHE_CONFIG: u64 = 0xF; // L1I, L1D, L2, L3 present
34+
const CPUCFG16_CACHE_CONFIG: u64 = 0xF; // L1I, L1D, L2, L3 present
3535
const CPUCFG17_L1I_MASK: u64 = ((5u64) << 24) | ((8u64) << 16) | ((4u64 - 1) << 0);
3636
const CPUCFG18_L1D_MASK: u64 = ((5u64) << 24) | ((8u64) << 16) | ((4u64 - 1) << 0);
3737
const CPUCFG19_L2_MASK: u64 = ((6u64) << 24) | ((9u64) << 16) | ((8u64 - 1) << 0);
@@ -94,11 +94,7 @@ pub fn setup_regs(
9494

9595
debug!(
9696
"loongarch setup_regs: cpu_id={}, pc=0x{:x}, a0={}, a1=0x{:x}, a2=0x{:x}",
97-
cpu_id,
98-
regs.pc,
99-
regs.gpr[4],
100-
regs.gpr[5],
101-
regs.gpr[6],
97+
cpu_id, regs.pc, regs.gpr[4], regs.gpr[5], regs.gpr[6],
10298
);
10399
let mut cpucfg0 = [0_u8; 8];
104100
if vcpu.get_one_reg(CPUCFG0_REG_ID, &mut cpucfg0).is_ok() {

src/devices/src/fdt/loongarch64.rs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,11 @@ fn create_chosen_node<T: DeviceInfoForFDT + Clone + Debug>(
143143
// Only set stdout-path if we have a Serial device (not when using Virtio Console).
144144
// When using Virtio Console (hvc0), kernel uses the console= cmdline parameter instead.
145145
// When using Serial (ttyS0), we point FDT to the serial device node.
146-
let has_serial = dev_info.keys().any(|(device_type, _)| device_type == &DeviceType::Serial);
147-
let has_virtio_console = dev_info.keys()
146+
let has_serial = dev_info
147+
.keys()
148+
.any(|(device_type, _)| device_type == &DeviceType::Serial);
149+
let has_virtio_console = dev_info
150+
.keys()
148151
.any(|(device_type, _)| matches!(device_type, DeviceType::Virtio(3))); // VIRTIO_ID_CONSOLE = 3
149152

150153
if has_serial && !has_virtio_console {
@@ -157,22 +160,22 @@ fn create_chosen_node<T: DeviceInfoForFDT + Clone + Debug>(
157160
}
158161
}
159162
let stdout_path = if has_serial && !has_virtio_console {
160-
dev_info.iter().find_map(|((device_type, _device_id), info)| {
161-
if device_type == &DeviceType::Serial {
162-
Some(format!("/serial@{:x}", info.addr()))
163-
} else {
164-
None
165-
}
166-
})
163+
dev_info
164+
.iter()
165+
.find_map(|((device_type, _device_id), info)| {
166+
if device_type == &DeviceType::Serial {
167+
Some(format!("/serial@{:x}", info.addr()))
168+
} else {
169+
None
170+
}
171+
})
167172
} else {
168173
None
169174
};
170175

171176
debug!(
172177
"loongarch chosen: has_serial={}, has_virtio_console={}, stdout_path={:?}",
173-
has_serial,
174-
has_virtio_console,
175-
stdout_path,
178+
has_serial, has_virtio_console, stdout_path,
176179
);
177180

178181
if let Some(path) = &stdout_path {

src/devices/src/legacy/kvmloongarchirqchip.rs

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ use utils::eventfd::EventFd;
1111
use vmm_sys_util::ioctl::ioctl_with_ref;
1212
use vmm_sys_util::ioctl_iow_nr;
1313

14-
ioctl_iow_nr!(KVM_INTERRUPT_LOONGARCH, kvm_bindings::KVMIO, 0x86, kvm_interrupt);
14+
ioctl_iow_nr!(
15+
KVM_INTERRUPT_LOONGARCH,
16+
kvm_bindings::KVMIO,
17+
0x86,
18+
kvm_interrupt
19+
);
1520

1621
pub struct KvmLoongArchIrqChip {
1722
_ipi_fd: DeviceFd,
@@ -96,23 +101,17 @@ impl IrqChipT for KvmLoongArchIrqChip {
96101

97102
fn set_irq(
98103
&self,
99-
_irq_line: Option<u32>,
104+
irq_line: Option<u32>,
100105
interrupt_evt: Option<&EventFd>,
101106
) -> Result<(), DeviceError> {
102-
//debug!("loongarch irqchip set_irq irq_line={:?}", _irq_line);
103-
if let Some(interrupt_evt) = interrupt_evt {
104-
if let Err(e) = interrupt_evt.write(1) {
105-
error!("Failed to signal used queue: {e:?}");
106-
return Err(DeviceError::FailedSignalingUsedQueue(e));
107-
}
108-
//debug!("loongarch irqchip eventfd write ok");
109-
} else {
110-
error!("EventFd not set up for irq line");
111-
return Err(DeviceError::FailedSignalingUsedQueue(io::Error::new(
112-
io::ErrorKind::NotFound,
113-
"EventFd not set up for irq line".to_string(),
114-
)));
107+
//debug!("loongarch irqchip set_irq_state irq_line={:?}", irq_line);
108+
// LoongArch mmio/serial path does not rely on irqfd registration.
109+
// Inject via KVM_INTERRUPT (assert).
110+
if let Err(e) = self.set_irq_state(irq_line, interrupt_evt, true) {
111+
error!("Failed to set irq state: {e:?}");
112+
return Err(e);
115113
}
114+
//debug!("loongarch irqchip eventfd write ok");
116115
Ok(())
117116
}
118117

@@ -132,11 +131,7 @@ impl IrqChipT for KvmLoongArchIrqChip {
132131
}
133132
};
134133

135-
let signed_irq = if active {
136-
irq as i32
137-
} else {
138-
-(irq as i32)
139-
};
134+
let signed_irq = if active { irq as i32 } else { -(irq as i32) };
140135
let interrupt = kvm_interrupt {
141136
// KVM uapi exposes `irq` as u32, but LoongArch KVM casts it back to `int`
142137
// and uses the sign to distinguish assert vs deassert.

src/devices/src/legacy/loongarch64/serial.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,11 @@ impl Serial {
159159
if let Some(intc) = &self.intc {
160160
intc.lock()
161161
.unwrap()
162-
.set_irq_state(self.irq_line, Some(&self.interrupt_evt), self.interrupt_active())
162+
.set_irq_state(
163+
self.irq_line,
164+
Some(&self.interrupt_evt),
165+
self.interrupt_active(),
166+
)
163167
.map_err(|e| io::Error::new(io::ErrorKind::Other, format!("{e:?}")))?;
164168
return Ok(());
165169
}

src/devices/src/virtio/mmio.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,11 @@ impl InterruptTransport {
140140
let _irq_sync = self.0.irq_sync.lock().unwrap();
141141
let old = self.status().fetch_or(status as usize, Ordering::SeqCst);
142142
if old == 0 {
143-
self.intc()
144-
.lock()
145-
.unwrap()
146-
.set_irq_state(self.0.irq_line, Some(&self.0.event), true)?;
143+
self.intc().lock().unwrap().set_irq_state(
144+
self.0.irq_line,
145+
Some(&self.0.event),
146+
true,
147+
)?;
147148
}
148149
return Ok(());
149150
}
@@ -511,12 +512,12 @@ impl BusDevice for MmioTransport {
511512
.fetch_and(!(v as usize), Ordering::SeqCst);
512513
let new = old & !(v as usize);
513514
if old != 0 && new == 0 {
514-
if let Err(e) = self
515-
.interrupt
516-
.intc()
517-
.lock()
518-
.unwrap()
519-
.set_irq_state(self.interrupt.0.irq_line, Some(&self.interrupt.0.event), false)
515+
if let Err(e) =
516+
self.interrupt.intc().lock().unwrap().set_irq_state(
517+
self.interrupt.0.irq_line,
518+
Some(&self.interrupt.0.event),
519+
false,
520+
)
520521
{
521522
warn!(target: &self.interrupt.0.log_target, "Failed to deassert irq: {e:?}");
522523
}

0 commit comments

Comments
 (0)