]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Use virtio nic model on s390x
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 20 Dec 2023 10:33:24 +0000 (11:33 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 20 Dec 2023 12:19:13 +0000 (13:19 +0100)
Also refactor things a bit to move more into the Architecture enum.

Also make sure the default network interface on s390x is configured
properly.

We also fail earlier now if an architecture is specified for which
we haven't defined a machine yet.

mkosi/config.py
mkosi/qemu.py

index 00becd38f373ec03d44826c4850e4b3816264294..dbf41b8375a93f88f7fe26b700d1492660623fdc 100644 (file)
@@ -308,7 +308,6 @@ class Architecture(StrEnum):
             Architecture.loongarch64 : "loongarch64",
         }.get(self)
 
-
     def to_qemu(self) -> str:
         a = {
             Architecture.alpha       : "alpha",
@@ -353,6 +352,30 @@ class Architecture(StrEnum):
     def supports_fw_cfg(self) -> bool:
         return self in (Architecture.x86, Architecture.x86_64, Architecture.arm, Architecture.arm64)
 
+    def default_qemu_machine(self) -> str:
+        m = {
+            Architecture.x86      : "q35",
+            Architecture.x86_64   : "q35",
+            Architecture.arm      : "virt",
+            Architecture.arm64    : "virt",
+            Architecture.s390     : "s390-ccw-virtio",
+            Architecture.s390x    : "s390-ccw-virtio",
+            Architecture.ppc      : "pseries",
+            Architecture.ppc64    : "pseries",
+            Architecture.ppc64_le : "pseries",
+        }
+
+        if self not in m:
+            die(f"No qemu machine defined for architecture {self}")
+
+        return m[self]
+
+    def default_qemu_nic_model(self) -> str:
+        return {
+            Architecture.s390  : "virtio",
+            Architecture.s390x : "virtio",
+        }.get(self, "virtio-net-pci")
+
     def is_native(self) -> bool:
         return self == self.native()
 
@@ -3028,7 +3051,7 @@ def load_kernel_command_line_extra(args: argparse.Namespace) -> list[str]:
     ]
 
     if not any(s.startswith("ip=") for s in args.kernel_command_line_extra):
-        cmdline += ["ip=enp0s1:any", "ip=enp0s2:any", "ip=host0:any", "ip=none"]
+        cmdline += ["ip=enc0:any", "ip=enp0s1:any", "ip=enp0s2:any", "ip=host0:any", "ip=none"]
 
     if not any(s.startswith("loglevel=") for s in args.kernel_command_line_extra):
         cmdline += ["loglevel=4"]
index aba76f629b0b3ccb389ed69d2afaeea659afc0fd..dfbeff34e3534faa0c46ae52dd9a988c1f47590d 100644 (file)
@@ -529,15 +529,9 @@ def run_qemu(args: MkosiArgs, config: MkosiConfig, qemu_device_fds: Mapping[Qemu
     if config.runtime_trees or config.output_format == OutputFormat.directory:
         shm = ["-object", f"memory-backend-memfd,id=mem,size={config.qemu_mem},share=on"]
 
-    if config.architecture == Architecture.arm64:
-        machine = "type=virt"
-    elif config.architecture == Architecture.s390x:
-        machine = "type=s390-ccw-virtio"
-    elif config.architecture == Architecture.ppc64_le:
-        machine = "type=pseries"
-    else:
-        machine = f"type=q35,smm={'on' if ovmf_supports_sb else 'off'}"
-
+    machine = f"type={config.architecture.default_qemu_machine()}"
+    if firmware == QemuFirmware.uefi:
+        machine += f",smm={'on' if ovmf_supports_sb else 'off'}"
     if shm:
         machine += ",memory-backend=mem"
 
@@ -551,8 +545,7 @@ def run_qemu(args: MkosiArgs, config: MkosiConfig, qemu_device_fds: Mapping[Qemu
         *shm,
     ]
 
-    if config.architecture not in (Architecture.s390, Architecture.s390x):
-        cmdline += ["-nic", "user,model=virtio-net-pci"]
+    cmdline += ["-nic", f"user,model={config.architecture.default_qemu_nic_model()}"]
 
     if config.qemu_kvm != ConfigFeature.disabled and have_kvm and config.architecture.is_native():
         accel = "kvm"