update loongarch64 support
(cherry picked from commit cbd48b5b81ea32d57ab0e2a390c3e3e18bcbaa30)
This commit is contained in:
parent
5295d3c4eb
commit
f55db71ee3
@ -1,39 +1,199 @@
|
|||||||
From 9207593a65307102e39129ed82fc7df0dbfe178d Mon Sep 17 00:00:00 2001
|
From 870dc69df0bee7309430a5f0cc3219e5ebdc4a47 Mon Sep 17 00:00:00 2001
|
||||||
From: yangchenguang <yangchenguang@kylinsec.com.cn>
|
From: yangchenguang <yangchenguang@kylinsec.com.cn>
|
||||||
Date: Thu, 13 Apr 2023 10:07:44 +0800
|
Date: Tue, 6 Jun 2023 19:53:32 +0800
|
||||||
Subject: [PATCH] Add loongarch support
|
Subject: [PATCH] Add loongarch64 support
|
||||||
|
|
||||||
Signed-off-by: yangchenguang <yangchenguang@kylinsec.com.cn>
|
Signed-off-by: yangchenguang <yangchenguang@kylinsec.com.cn>
|
||||||
---
|
---
|
||||||
virtManager/create.py | 1 +
|
virtManager/create.py | 4 ++++
|
||||||
virtinst/domain/os.py | 2 ++
|
virtinst/devices/disk.py | 2 ++
|
||||||
2 files changed, 3 insertions(+)
|
virtinst/devices/graphics.py | 2 +-
|
||||||
|
virtinst/devices/video.py | 2 ++
|
||||||
|
virtinst/domain/cpu.py | 5 +++++
|
||||||
|
virtinst/domain/os.py | 2 ++
|
||||||
|
virtinst/domcapabilities.py | 4 ++++
|
||||||
|
virtinst/guest.py | 14 ++++++++++----
|
||||||
|
8 files changed, 30 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
diff --git a/virtManager/create.py b/virtManager/create.py
|
diff --git a/virtManager/create.py b/virtManager/create.py
|
||||||
index e7ddd0c..dcc70bb 100644
|
index e7ddd0c..2afd400 100644
|
||||||
--- a/virtManager/create.py
|
--- a/virtManager/create.py
|
||||||
+++ b/virtManager/create.py
|
+++ b/virtManager/create.py
|
||||||
@@ -428,6 +428,7 @@ class vmmCreate(vmmGObjectUI):
|
@@ -428,6 +428,7 @@ class vmmCreate(vmmGObjectUI):
|
||||||
installable_arch = bool(guest.os.is_x86() or
|
installable_arch = bool(guest.os.is_x86() or
|
||||||
guest.os.is_ppc64() or
|
guest.os.is_ppc64() or
|
||||||
guest.os.is_sw_64() or
|
guest.os.is_sw_64() or
|
||||||
+ guest.os.is_loongarch64() or
|
+ guest.os.is_loongarch() or
|
||||||
guest.os.is_s390x())
|
guest.os.is_s390x())
|
||||||
|
|
||||||
if guest.prefers_uefi():
|
if guest.prefers_uefi():
|
||||||
|
@@ -823,6 +824,9 @@ class vmmCreate(vmmGObjectUI):
|
||||||
|
machines.sort()
|
||||||
|
|
||||||
|
defmachine = None
|
||||||
|
+
|
||||||
|
+ if self._capsinfo.arch in ["loongarch64"]:
|
||||||
|
+ defmachine = "loongson7a"
|
||||||
|
prios = []
|
||||||
|
recommended_machine = virtinst.Guest.get_recommended_machine(
|
||||||
|
self._capsinfo)
|
||||||
|
diff --git a/virtinst/devices/disk.py b/virtinst/devices/disk.py
|
||||||
|
index 533631e..ac20f08 100644
|
||||||
|
--- a/virtinst/devices/disk.py
|
||||||
|
+++ b/virtinst/devices/disk.py
|
||||||
|
@@ -963,6 +963,8 @@ class DeviceDisk(Device):
|
||||||
|
return "sata"
|
||||||
|
if self.is_cdrom() and guest.os.is_s390x():
|
||||||
|
return "scsi"
|
||||||
|
+ if self.is_cdrom() and guest.os.is_loongarch():
|
||||||
|
+ return "scsi"
|
||||||
|
return "ide"
|
||||||
|
|
||||||
|
def set_defaults(self, guest):
|
||||||
|
diff --git a/virtinst/devices/graphics.py b/virtinst/devices/graphics.py
|
||||||
|
index dafae06..fa0b9e1 100644
|
||||||
|
--- a/virtinst/devices/graphics.py
|
||||||
|
+++ b/virtinst/devices/graphics.py
|
||||||
|
@@ -203,7 +203,7 @@ class DeviceGraphics(Device):
|
||||||
|
if not self.conn.is_qemu() and not self.conn.is_test():
|
||||||
|
return False
|
||||||
|
# Spice has issues on some host arches, like ppc, so whitelist it
|
||||||
|
- if self.conn.caps.host.cpu.arch not in ["i686", "x86_64"]:
|
||||||
|
+ if self.conn.caps.host.cpu.arch not in ["i686", "x86_64", "loongarch64"]:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
diff --git a/virtinst/devices/video.py b/virtinst/devices/video.py
|
||||||
|
index 785d412..5e459bb 100644
|
||||||
|
--- a/virtinst/devices/video.py
|
||||||
|
+++ b/virtinst/devices/video.py
|
||||||
|
@@ -47,6 +47,8 @@ class DeviceVideo(Device):
|
||||||
|
return "virtio"
|
||||||
|
if guest.conn.is_qemu() and guest.os.is_s390x():
|
||||||
|
return "virtio"
|
||||||
|
+ if guest.os.is_loongarch():
|
||||||
|
+ return "virtio"
|
||||||
|
if guest.has_spice() and guest.os.is_x86():
|
||||||
|
if guest.has_gl():
|
||||||
|
return "virtio"
|
||||||
|
diff --git a/virtinst/domain/cpu.py b/virtinst/domain/cpu.py
|
||||||
|
index 3548acd..7d35a11 100644
|
||||||
|
--- a/virtinst/domain/cpu.py
|
||||||
|
+++ b/virtinst/domain/cpu.py
|
||||||
|
@@ -274,6 +274,11 @@ class DomainCpu(XMLBuilder):
|
||||||
|
# -M virt defaults to a 32bit CPU, even if using aarch64
|
||||||
|
self.model = "cortex-a57"
|
||||||
|
|
||||||
|
+ elif guest.os.is_loongarch() and guest.type == "kvm":
|
||||||
|
+ if guest.os.arch != self.conn.caps.host.cpu.arch:
|
||||||
|
+ return
|
||||||
|
+ self.set_special_mode(guest, guest.loongarch_cpu_default)
|
||||||
|
+
|
||||||
|
elif guest.os.is_x86() and guest.type == "kvm":
|
||||||
|
self._set_cpu_x86_kvm_default(guest)
|
||||||
|
|
||||||
diff --git a/virtinst/domain/os.py b/virtinst/domain/os.py
|
diff --git a/virtinst/domain/os.py b/virtinst/domain/os.py
|
||||||
index fdcaa19..5e16887 100644
|
index fdcaa19..fe46dd2 100644
|
||||||
--- a/virtinst/domain/os.py
|
--- a/virtinst/domain/os.py
|
||||||
+++ b/virtinst/domain/os.py
|
+++ b/virtinst/domain/os.py
|
||||||
@@ -48,6 +48,8 @@ class DomainOs(XMLBuilder):
|
@@ -48,6 +48,8 @@ class DomainOs(XMLBuilder):
|
||||||
return self.arch == "aarch64"
|
return self.arch == "aarch64"
|
||||||
def is_sw_64(self):
|
def is_sw_64(self):
|
||||||
return self.arch == "sw_64"
|
return self.arch == "sw_64"
|
||||||
+ def is_loongarch64(self):
|
+ def is_loongarch(self):
|
||||||
+ return self.arch == "loongarch64"
|
+ return self.arch == "loongarch64"
|
||||||
def is_arm(self):
|
def is_arm(self):
|
||||||
return self.is_arm32() or self.is_arm64()
|
return self.is_arm32() or self.is_arm64()
|
||||||
def is_arm_vexpress(self):
|
def is_arm_vexpress(self):
|
||||||
|
diff --git a/virtinst/domcapabilities.py b/virtinst/domcapabilities.py
|
||||||
|
index 4cbb7f2..1fbb3d0 100644
|
||||||
|
--- a/virtinst/domcapabilities.py
|
||||||
|
+++ b/virtinst/domcapabilities.py
|
||||||
|
@@ -177,6 +177,10 @@ class DomainCapabilities(XMLBuilder):
|
||||||
|
"armv7l": [
|
||||||
|
r".*arm/QEMU_EFI.*", # fedora, gerd's firmware repo
|
||||||
|
],
|
||||||
|
+ "loongarch64": [
|
||||||
|
+ ".*loongarch_bios.bin", # loongarch
|
||||||
|
+ ".*loongarch_bios.bin", # gerd's firmware repo
|
||||||
|
+ ],
|
||||||
|
}
|
||||||
|
|
||||||
|
def find_uefi_path_for_arch(self):
|
||||||
|
diff --git a/virtinst/guest.py b/virtinst/guest.py
|
||||||
|
index c0471cd..c539276 100644
|
||||||
|
--- a/virtinst/guest.py
|
||||||
|
+++ b/virtinst/guest.py
|
||||||
|
@@ -162,6 +162,7 @@ class Guest(XMLBuilder):
|
||||||
|
self.skip_default_graphics = False
|
||||||
|
self.skip_default_rng = False
|
||||||
|
self.x86_cpu_default = self.cpu.SPECIAL_MODE_APP_DEFAULT
|
||||||
|
+ self.loongarch_cpu_default = self.cpu.SPECIAL_MODE_HOST_MODEL_ONLY
|
||||||
|
|
||||||
|
self.__osinfo = None
|
||||||
|
self._capsinfo = None
|
||||||
|
@@ -283,6 +284,7 @@ class Guest(XMLBuilder):
|
||||||
|
# These _only_ support virtio so don't check the OS
|
||||||
|
if (self.os.is_arm_machvirt() or
|
||||||
|
self.os.is_s390x() or
|
||||||
|
+ self.os.is_loongarch() or
|
||||||
|
self.os.is_pseries()):
|
||||||
|
return True
|
||||||
|
|
||||||
|
@@ -318,7 +320,7 @@ class Guest(XMLBuilder):
|
||||||
|
arm+machvirt prefers UEFI since it's required for traditional
|
||||||
|
install methods
|
||||||
|
"""
|
||||||
|
- return self.os.is_arm_machvirt()
|
||||||
|
+ return (self.os.is_arm_machvirt() or self.os.is_loongarch())
|
||||||
|
|
||||||
|
def get_uefi_path(self):
|
||||||
|
"""
|
||||||
|
@@ -350,6 +352,8 @@ class Guest(XMLBuilder):
|
||||||
|
"""
|
||||||
|
self.os.loader_ro = True
|
||||||
|
self.os.loader_type = "pflash"
|
||||||
|
+ if self.os.is_loongarch():
|
||||||
|
+ self.os.loader_type = "rom"
|
||||||
|
self.os.loader = path
|
||||||
|
|
||||||
|
# If the firmware name contains "secboot" it is probably build
|
||||||
|
@@ -573,7 +577,7 @@ class Guest(XMLBuilder):
|
||||||
|
usb_keyboard = False
|
||||||
|
if self.os.is_x86() and not self.os.is_xenpv():
|
||||||
|
usb_tablet = self.osinfo.supports_usbtablet()
|
||||||
|
- if self.os.is_arm_machvirt():
|
||||||
|
+ if (self.os.is_arm_machvirt() or self.os.is_loongarch()):
|
||||||
|
usb_tablet = True
|
||||||
|
usb_keyboard = True
|
||||||
|
|
||||||
|
@@ -665,7 +669,7 @@ class Guest(XMLBuilder):
|
||||||
|
return
|
||||||
|
if self.os.is_container() and not self.conn.is_vz():
|
||||||
|
return
|
||||||
|
- if self.os.arch not in ["x86_64", "i686", "ppc64", "ppc64le"]:
|
||||||
|
+ if self.os.arch not in ["x86_64", "i686", "ppc64", "ppc64le", "loongarch64"]:
|
||||||
|
return
|
||||||
|
self.add_device(DeviceGraphics(self.conn))
|
||||||
|
|
||||||
|
@@ -711,7 +715,7 @@ class Guest(XMLBuilder):
|
||||||
|
break
|
||||||
|
|
||||||
|
# Add virtio-scsi controller if needed
|
||||||
|
- if ((self.os.is_arm_machvirt() or self.os.is_pseries()) and
|
||||||
|
+ if ((self.os.is_arm_machvirt() or self.os.is_pseries() or self.os.is_loongarch()) and
|
||||||
|
not has_any_scsi and
|
||||||
|
not has_virtio_scsi):
|
||||||
|
for dev in self.devices.disk:
|
||||||
|
@@ -753,6 +757,8 @@ class Guest(XMLBuilder):
|
||||||
|
self.add_device(dev)
|
||||||
|
|
||||||
|
def _add_spice_usbredir(self):
|
||||||
|
+ if self.os.is_loongarch():
|
||||||
|
+ return
|
||||||
|
if self.skip_default_usbredir:
|
||||||
|
return
|
||||||
|
if self.devices.redirdev:
|
||||||
--
|
--
|
||||||
2.33.0
|
2.33.0
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
%global __python %{__python3}
|
%global __python %{__python3}
|
||||||
Name: virt-manager
|
Name: virt-manager
|
||||||
Version: 2.1.0
|
Version: 2.1.0
|
||||||
Release: 8
|
Release: 9
|
||||||
Summary: The manage virtual machines tool which via libvirt.
|
Summary: The manage virtual machines tool which via libvirt.
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
@ -83,6 +83,9 @@ done
|
|||||||
%{_mandir}/man1/{virt-install.1*,virt-clone.1*,virt-convert.1*,virt-xml.1*}
|
%{_mandir}/man1/{virt-install.1*,virt-clone.1*,virt-convert.1*,virt-xml.1*}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Aug 10 2023 yeqinglong <yeqinglong@kylinsec.com.cn> - 2.1.0-9
|
||||||
|
- update loongarch64 support
|
||||||
|
|
||||||
* Thu Apr 13 2023 yangchenguang <yangchenguang@kylinsec.com.cn> - 2.1.0-8
|
* Thu Apr 13 2023 yangchenguang <yangchenguang@kylinsec.com.cn> - 2.1.0-8
|
||||||
- Modify patch file incorrect
|
- Modify patch file incorrect
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user