diff --git a/src/runtime-rs/crates/hypervisor/src/device/driver/virtio_blk_modern.rs b/src/runtime-rs/crates/hypervisor/src/device/driver/virtio_blk_modern.rs index 6d40af4746..11141492cc 100644 --- a/src/runtime-rs/crates/hypervisor/src/device/driver/virtio_blk_modern.rs +++ b/src/runtime-rs/crates/hypervisor/src/device/driver/virtio_blk_modern.rs @@ -53,6 +53,9 @@ pub struct BlockConfigModern { /// scsi_addr is of the format SCSI-Id:LUN pub scsi_addr: Option, + /// CCW device address for virtio-blk-ccw on s390x (e.g., "0.0.0005") + pub ccw_addr: Option, + /// device attach count pub attach_count: u64, diff --git a/src/runtime-rs/crates/hypervisor/src/qemu/inner.rs b/src/runtime-rs/crates/hypervisor/src/qemu/inner.rs index db1172ec0d..353e80dd80 100644 --- a/src/runtime-rs/crates/hypervisor/src/qemu/inner.rs +++ b/src/runtime-rs/crates/hypervisor/src/qemu/inner.rs @@ -978,7 +978,7 @@ impl QemuInner { }; // Second, execute the asynchronous hotplug without holding the lock. - let (pci_path, scsi_addr) = qmp + let (pci_path, addr_str) = qmp .hotplug_block_device( &driver, index, @@ -1000,8 +1000,12 @@ impl QemuInner { if let Some(p) = pci_path { cfg.pci_path = Some(p); } - if let Some(s) = scsi_addr { - cfg.scsi_addr = Some(s); + if let Some(addr) = addr_str { + if driver == VIRTIO_BLK_CCW { + cfg.ccw_addr = Some(addr); + } else { + cfg.scsi_addr = Some(addr); + } } info!(sl!(), "Completed BlockModern hotplug: {:?}", &cfg); } diff --git a/src/runtime-rs/crates/resource/src/volume/utils.rs b/src/runtime-rs/crates/resource/src/volume/utils.rs index 363742be07..c2b6cde6c5 100644 --- a/src/runtime-rs/crates/resource/src/volume/utils.rs +++ b/src/runtime-rs/crates/resource/src/volume/utils.rs @@ -107,6 +107,13 @@ pub async fn handle_block_volume( return Err(anyhow!("block driver is scsi but no scsi address exists")); } } + KATA_CCW_DEV_TYPE => { + if let Some(ccw_addr) = &device.config.ccw_addr { + ccw_addr.to_string() + } else { + return Err(anyhow!("block driver is ccw but no ccw address exists")); + } + } _ => device.config.virt_path.clone(), }; device_id = device.device_id.clone();