From 052c87005849d5406477607e352588b39fb96896 Mon Sep 17 00:00:00 2001 From: leoredivo <94771718+leoredivo@users.noreply.github.com> Date: Tue, 1 Aug 2023 16:51:36 -0700 Subject: [PATCH 1/6] New function to kernel_disk_workload to allow new disk device location Added a parameter to kernel_disk_workload which allows users to change the disk device location. Maintained the previous way of setting a disk device as the default, however added a function to allow users to override this default --- .../gem5/components/boards/arm_board.py | 2 +- .../boards/experimental/lupv_board.py | 2 +- .../components/boards/kernel_disk_workload.py | 22 ++++++++++++++++++- .../gem5/components/boards/riscv_board.py | 2 +- .../gem5/components/boards/x86_board.py | 2 +- .../riscvmatched/riscvmatched_board.py | 2 +- 6 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/python/gem5/components/boards/arm_board.py b/src/python/gem5/components/boards/arm_board.py index b439edf970..82b7a39107 100644 --- a/src/python/gem5/components/boards/arm_board.py +++ b/src/python/gem5/components/boards/arm_board.py @@ -354,7 +354,7 @@ class ArmBoard(ArmSystem, AbstractBoard, KernelDiskWorkload): ) @overrides(KernelDiskWorkload) - def get_disk_device(self): + def _get_default_disk_device(self): return "/dev/vda" @overrides(KernelDiskWorkload) diff --git a/src/python/gem5/components/boards/experimental/lupv_board.py b/src/python/gem5/components/boards/experimental/lupv_board.py index ad130b7273..cba50a1d56 100644 --- a/src/python/gem5/components/boards/experimental/lupv_board.py +++ b/src/python/gem5/components/boards/experimental/lupv_board.py @@ -539,7 +539,7 @@ class LupvBoard(AbstractSystemBoard, KernelDiskWorkload): return ["console=ttyLIO0", "root={root_value}", "rw"] @overrides(KernelDiskWorkload) - def get_disk_device(self) -> str: + def set_default_disk_device(self) -> str: return "/dev/lda" @overrides(KernelDiskWorkload) diff --git a/src/python/gem5/components/boards/kernel_disk_workload.py b/src/python/gem5/components/boards/kernel_disk_workload.py index 15e0cdf303..79d55ba8b4 100644 --- a/src/python/gem5/components/boards/kernel_disk_workload.py +++ b/src/python/gem5/components/boards/kernel_disk_workload.py @@ -39,6 +39,7 @@ import os from pathlib import Path import m5 +from m5 import warn class KernelDiskWorkload: @@ -84,11 +85,25 @@ class KernelDiskWorkload: """ raise NotImplementedError - @abstractmethod def get_disk_device(self) -> str: """ Get the disk device, e.g., "/dev/sda", where the disk image is placed. + :returns: The disk device. + """ + if self._disk_device is None: + warn("No disk device set, ie where the disk image is located. Defaulting to board disk device") + return _get_default_disk_device() + else: + return self._disk_device + + + + @abstractmethod + def _get_default_disk_device(self) -> str: + """ + Set a default disk device, in case user does not specify a disk device. + :returns: The disk device. """ raise NotImplementedError @@ -139,6 +154,7 @@ class KernelDiskWorkload: kernel: KernelResource, disk_image: DiskImageResource, bootloader: Optional[BootloaderResource] = None, + _disk_device: Optional[str] = None, readfile: Optional[str] = None, readfile_contents: Optional[str] = None, kernel_args: Optional[List[str]] = None, @@ -171,6 +187,9 @@ class KernelDiskWorkload: # Abstract board. This function will not work otherwise. assert isinstance(self, AbstractBoard) + # Set the disk device + self._disk_device = _disk_device + # If we are setting a workload of this type, we need to run as a # full-system simulation. self._set_fullsystem(True) @@ -192,6 +211,7 @@ class KernelDiskWorkload: if bootloader is not None: self._bootloader = [bootloader.get_local_path()] + # Set the readfile. if readfile: self.readfile = readfile diff --git a/src/python/gem5/components/boards/riscv_board.py b/src/python/gem5/components/boards/riscv_board.py index 25f1fac562..d8020d1974 100644 --- a/src/python/gem5/components/boards/riscv_board.py +++ b/src/python/gem5/components/boards/riscv_board.py @@ -467,7 +467,7 @@ class RiscvBoard(AbstractSystemBoard, KernelDiskWorkload): fdt.writeDtbFile(os.path.join(outdir, "device.dtb")) @overrides(KernelDiskWorkload) - def get_disk_device(self): + def _get_default_disk_device(self): return "/dev/vda" @overrides(KernelDiskWorkload) diff --git a/src/python/gem5/components/boards/x86_board.py b/src/python/gem5/components/boards/x86_board.py index 04fec617c1..1a3b9fa1c8 100644 --- a/src/python/gem5/components/boards/x86_board.py +++ b/src/python/gem5/components/boards/x86_board.py @@ -296,7 +296,7 @@ class X86Board(AbstractSystemBoard, KernelDiskWorkload): ] @overrides(KernelDiskWorkload) - def get_disk_device(self): + def _get_default_disk_device(self): return "/dev/hda" @overrides(KernelDiskWorkload) diff --git a/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py b/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py index 9ca95839f8..3411ea61be 100644 --- a/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py +++ b/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py @@ -539,7 +539,7 @@ class RISCVMatchedBoard( fdt.writeDtbFile(os.path.join(outdir, "device.dtb")) @overrides(KernelDiskWorkload) - def get_disk_device(self): + def _get_default_disk_device(self): return "/dev/vda" @overrides(KernelDiskWorkload) From cf1678f43f6faab30e2195040dbb235b08a350e9 Mon Sep 17 00:00:00 2001 From: Leo Redivo Date: Fri, 4 Aug 2023 13:08:41 -0700 Subject: [PATCH 2/6] misc: Fix pre-commit formatting issues Change-Id: I50e71cfc21d43c2c17da52cf2f40591599907548 --- .../gem5/components/boards/arm_board.py | 2 +- .../boards/experimental/lupv_board.py | 2 +- .../components/boards/kernel_disk_workload.py | 19 +++++++++---------- .../gem5/components/boards/riscv_board.py | 2 +- .../gem5/components/boards/x86_board.py | 2 +- .../riscvmatched/riscvmatched_board.py | 2 +- 6 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/python/gem5/components/boards/arm_board.py b/src/python/gem5/components/boards/arm_board.py index 82b7a39107..451bb8d7dc 100644 --- a/src/python/gem5/components/boards/arm_board.py +++ b/src/python/gem5/components/boards/arm_board.py @@ -354,7 +354,7 @@ class ArmBoard(ArmSystem, AbstractBoard, KernelDiskWorkload): ) @overrides(KernelDiskWorkload) - def _get_default_disk_device(self): + def get_default_disk_device(self): return "/dev/vda" @overrides(KernelDiskWorkload) diff --git a/src/python/gem5/components/boards/experimental/lupv_board.py b/src/python/gem5/components/boards/experimental/lupv_board.py index cba50a1d56..f56a8804ed 100644 --- a/src/python/gem5/components/boards/experimental/lupv_board.py +++ b/src/python/gem5/components/boards/experimental/lupv_board.py @@ -539,7 +539,7 @@ class LupvBoard(AbstractSystemBoard, KernelDiskWorkload): return ["console=ttyLIO0", "root={root_value}", "rw"] @overrides(KernelDiskWorkload) - def set_default_disk_device(self) -> str: + def get_default_disk_device(self) -> str: return "/dev/lda" @overrides(KernelDiskWorkload) diff --git a/src/python/gem5/components/boards/kernel_disk_workload.py b/src/python/gem5/components/boards/kernel_disk_workload.py index 79d55ba8b4..435de35f82 100644 --- a/src/python/gem5/components/boards/kernel_disk_workload.py +++ b/src/python/gem5/components/boards/kernel_disk_workload.py @@ -39,7 +39,7 @@ import os from pathlib import Path import m5 -from m5 import warn +from m5.util import inform class KernelDiskWorkload: @@ -92,15 +92,15 @@ class KernelDiskWorkload: :returns: The disk device. """ if self._disk_device is None: - warn("No disk device set, ie where the disk image is located. Defaulting to board disk device") - return _get_default_disk_device() - else: + self._disk_device = get_default_disk_device() + inform(f"Disk Device set to {self._disk_device}") + return self._disk_device + else: + inform(f"Disk Device set to {self._disk_device}") return self._disk_device - - @abstractmethod - def _get_default_disk_device(self) -> str: + def get_default_disk_device(self) -> str: """ Set a default disk device, in case user does not specify a disk device. @@ -154,7 +154,7 @@ class KernelDiskWorkload: kernel: KernelResource, disk_image: DiskImageResource, bootloader: Optional[BootloaderResource] = None, - _disk_device: Optional[str] = None, + disk_device: Optional[str] = None, readfile: Optional[str] = None, readfile_contents: Optional[str] = None, kernel_args: Optional[List[str]] = None, @@ -188,7 +188,7 @@ class KernelDiskWorkload: assert isinstance(self, AbstractBoard) # Set the disk device - self._disk_device = _disk_device + self._disk_device = disk_device # If we are setting a workload of this type, we need to run as a # full-system simulation. @@ -211,7 +211,6 @@ class KernelDiskWorkload: if bootloader is not None: self._bootloader = [bootloader.get_local_path()] - # Set the readfile. if readfile: self.readfile = readfile diff --git a/src/python/gem5/components/boards/riscv_board.py b/src/python/gem5/components/boards/riscv_board.py index d8020d1974..c12ad21e70 100644 --- a/src/python/gem5/components/boards/riscv_board.py +++ b/src/python/gem5/components/boards/riscv_board.py @@ -467,7 +467,7 @@ class RiscvBoard(AbstractSystemBoard, KernelDiskWorkload): fdt.writeDtbFile(os.path.join(outdir, "device.dtb")) @overrides(KernelDiskWorkload) - def _get_default_disk_device(self): + def get_default_disk_device(self): return "/dev/vda" @overrides(KernelDiskWorkload) diff --git a/src/python/gem5/components/boards/x86_board.py b/src/python/gem5/components/boards/x86_board.py index 1a3b9fa1c8..7541cdc415 100644 --- a/src/python/gem5/components/boards/x86_board.py +++ b/src/python/gem5/components/boards/x86_board.py @@ -296,7 +296,7 @@ class X86Board(AbstractSystemBoard, KernelDiskWorkload): ] @overrides(KernelDiskWorkload) - def _get_default_disk_device(self): + def get_default_disk_device(self): return "/dev/hda" @overrides(KernelDiskWorkload) diff --git a/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py b/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py index 3411ea61be..5f26d0500d 100644 --- a/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py +++ b/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py @@ -539,7 +539,7 @@ class RISCVMatchedBoard( fdt.writeDtbFile(os.path.join(outdir, "device.dtb")) @overrides(KernelDiskWorkload) - def _get_default_disk_device(self): + def get_default_disk_device(self): return "/dev/vda" @overrides(KernelDiskWorkload) From 576e8c1897f187ecdd69d8e753abbc97861b380a Mon Sep 17 00:00:00 2001 From: Leo Redivo Date: Fri, 11 Aug 2023 15:07:41 -0700 Subject: [PATCH 3/6] misc: Move inform to get_default_kernel_args() and fix formatting Change-Id: I788b630d811f8268da0e87923741cf9afdef0a3e --- src/python/gem5/components/boards/arm_board.py | 1 + .../boards/experimental/lupv_board.py | 13 +++++++++---- .../components/boards/kernel_disk_workload.py | 17 +++++++++-------- .../gem5/components/boards/riscv_board.py | 7 ++++++- src/python/gem5/components/boards/x86_board.py | 1 + .../prebuilt/riscvmatched/riscvmatched_board.py | 7 ++++++- 6 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/python/gem5/components/boards/arm_board.py b/src/python/gem5/components/boards/arm_board.py index 451bb8d7dc..ae4b84f859 100644 --- a/src/python/gem5/components/boards/arm_board.py +++ b/src/python/gem5/components/boards/arm_board.py @@ -386,6 +386,7 @@ class ArmBoard(ArmSystem, AbstractBoard, KernelDiskWorkload): "lpj=19988480", "norandmaps", "root={root_value}", + "disk_device={disk_device}", "rw", f"mem={self.get_memory().get_size()}", ] diff --git a/src/python/gem5/components/boards/experimental/lupv_board.py b/src/python/gem5/components/boards/experimental/lupv_board.py index f56a8804ed..9136c5b797 100644 --- a/src/python/gem5/components/boards/experimental/lupv_board.py +++ b/src/python/gem5/components/boards/experimental/lupv_board.py @@ -534,14 +534,19 @@ class LupvBoard(AbstractSystemBoard, KernelDiskWorkload): fdt.writeDtsFile(os.path.join(outdir, "device.dts")) fdt.writeDtbFile(os.path.join(outdir, "device.dtb")) - @overrides(KernelDiskWorkload) - def get_default_kernel_args(self) -> List[str]: - return ["console=ttyLIO0", "root={root_value}", "rw"] - @overrides(KernelDiskWorkload) def get_default_disk_device(self) -> str: return "/dev/lda" + @overrides(KernelDiskWorkload) + def get_default_kernel_args(self) -> List[str]: + return [ + "console=ttyLIO0", + "root={root_value}", + "disk_device={disk_device}", + "rw", + ] + @overrides(KernelDiskWorkload) def _add_disk_to_board(self, disk_image: AbstractResource) -> None: # Note: This must be called after set_workload because it looks for an diff --git a/src/python/gem5/components/boards/kernel_disk_workload.py b/src/python/gem5/components/boards/kernel_disk_workload.py index 435de35f82..ed12d33ac1 100644 --- a/src/python/gem5/components/boards/kernel_disk_workload.py +++ b/src/python/gem5/components/boards/kernel_disk_workload.py @@ -91,13 +91,13 @@ class KernelDiskWorkload: :returns: The disk device. """ - if self._disk_device is None: - self._disk_device = get_default_disk_device() - inform(f"Disk Device set to {self._disk_device}") - return self._disk_device - else: - inform(f"Disk Device set to {self._disk_device}") - return self._disk_device + to_return = ( + self._disk_device + if self._disk_device + else self.get_default_disk_device() + ) + assert to_return is not None + return to_return @abstractmethod def get_default_disk_device(self) -> str: @@ -201,7 +201,8 @@ class KernelDiskWorkload: self.workload.command_line = ( " ".join(kernel_args or self.get_default_kernel_args()) ).format( - root_value=self.get_default_kernel_root_val(disk_image=disk_image) + root_value=self.get_default_kernel_root_val(disk_image=disk_image), + disk_device=self.get_disk_device(), ) # Setting the bootloader information for ARM board. The current diff --git a/src/python/gem5/components/boards/riscv_board.py b/src/python/gem5/components/boards/riscv_board.py index c12ad21e70..c70216c52d 100644 --- a/src/python/gem5/components/boards/riscv_board.py +++ b/src/python/gem5/components/boards/riscv_board.py @@ -494,4 +494,9 @@ class RiscvBoard(AbstractSystemBoard, KernelDiskWorkload): @overrides(KernelDiskWorkload) def get_default_kernel_args(self) -> List[str]: - return ["console=ttyS0", "root={root_value}", "rw"] + return [ + "console=ttyS0", + "root={root_value}", + "disk_device={disk_device}", + "rw", + ] diff --git a/src/python/gem5/components/boards/x86_board.py b/src/python/gem5/components/boards/x86_board.py index 7541cdc415..a0db8da10f 100644 --- a/src/python/gem5/components/boards/x86_board.py +++ b/src/python/gem5/components/boards/x86_board.py @@ -318,4 +318,5 @@ class X86Board(AbstractSystemBoard, KernelDiskWorkload): "console=ttyS0", "lpj=7999923", "root={root_value}", + "disk_device={disk_device}", ] diff --git a/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py b/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py index 5f26d0500d..bd7d0acc27 100644 --- a/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py +++ b/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py @@ -566,7 +566,12 @@ class RISCVMatchedBoard( @overrides(KernelDiskWorkload) def get_default_kernel_args(self) -> List[str]: - return ["console=ttyS0", "root={root_value}", "rw"] + return [ + "console=ttyS0", + "root={root_value}", + "disk_device={disk_device}", + "rw", + ] @overrides(KernelDiskWorkload) def set_kernel_disk_workload( From 020bc05928bc6abc8ec3325c2039544badad9674 Mon Sep 17 00:00:00 2001 From: Leo Redivo Date: Thu, 14 Sep 2023 11:47:19 -0700 Subject: [PATCH 4/6] misc: moved logic of get_disk_device to workload.command_line Change-Id: I5313bb381d5d8983b050047849fae61ea7dfc63b --- .../components/boards/kernel_disk_workload.py | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/src/python/gem5/components/boards/kernel_disk_workload.py b/src/python/gem5/components/boards/kernel_disk_workload.py index ed12d33ac1..1ca70f8f3f 100644 --- a/src/python/gem5/components/boards/kernel_disk_workload.py +++ b/src/python/gem5/components/boards/kernel_disk_workload.py @@ -39,7 +39,6 @@ import os from pathlib import Path import m5 -from m5.util import inform class KernelDiskWorkload: @@ -85,20 +84,6 @@ class KernelDiskWorkload: """ raise NotImplementedError - def get_disk_device(self) -> str: - """ - Get the disk device, e.g., "/dev/sda", where the disk image is placed. - - :returns: The disk device. - """ - to_return = ( - self._disk_device - if self._disk_device - else self.get_default_disk_device() - ) - assert to_return is not None - return to_return - @abstractmethod def get_default_disk_device(self) -> str: """ @@ -202,7 +187,11 @@ class KernelDiskWorkload: " ".join(kernel_args or self.get_default_kernel_args()) ).format( root_value=self.get_default_kernel_root_val(disk_image=disk_image), - disk_device=self.get_disk_device(), + disk_device=( + self._disk_device + if self._disk_device + else self.get_default_disk_device() + ), ) # Setting the bootloader information for ARM board. The current From 83374bdf999f96f933172e9c54e53d7ac97e60c0 Mon Sep 17 00:00:00 2001 From: Leo Redivo Date: Wed, 20 Sep 2023 15:28:49 -0700 Subject: [PATCH 5/6] misc: changed name get_default_disk_device to get_disk_device Change-Id: Ida9673445a4426ddedc8221010204bd2b71103a5 --- src/python/gem5/components/boards/arm_board.py | 2 +- src/python/gem5/components/boards/experimental/lupv_board.py | 2 +- src/python/gem5/components/boards/kernel_disk_workload.py | 2 +- src/python/gem5/components/boards/riscv_board.py | 2 +- src/python/gem5/components/boards/x86_board.py | 2 +- src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/python/gem5/components/boards/arm_board.py b/src/python/gem5/components/boards/arm_board.py index ae4b84f859..db215bd029 100644 --- a/src/python/gem5/components/boards/arm_board.py +++ b/src/python/gem5/components/boards/arm_board.py @@ -354,7 +354,7 @@ class ArmBoard(ArmSystem, AbstractBoard, KernelDiskWorkload): ) @overrides(KernelDiskWorkload) - def get_default_disk_device(self): + def get_disk_device(self): return "/dev/vda" @overrides(KernelDiskWorkload) diff --git a/src/python/gem5/components/boards/experimental/lupv_board.py b/src/python/gem5/components/boards/experimental/lupv_board.py index 9136c5b797..51db66913a 100644 --- a/src/python/gem5/components/boards/experimental/lupv_board.py +++ b/src/python/gem5/components/boards/experimental/lupv_board.py @@ -535,7 +535,7 @@ class LupvBoard(AbstractSystemBoard, KernelDiskWorkload): fdt.writeDtbFile(os.path.join(outdir, "device.dtb")) @overrides(KernelDiskWorkload) - def get_default_disk_device(self) -> str: + def get_disk_device(self) -> str: return "/dev/lda" @overrides(KernelDiskWorkload) diff --git a/src/python/gem5/components/boards/kernel_disk_workload.py b/src/python/gem5/components/boards/kernel_disk_workload.py index 1ca70f8f3f..c8c6e58878 100644 --- a/src/python/gem5/components/boards/kernel_disk_workload.py +++ b/src/python/gem5/components/boards/kernel_disk_workload.py @@ -85,7 +85,7 @@ class KernelDiskWorkload: raise NotImplementedError @abstractmethod - def get_default_disk_device(self) -> str: + def get_disk_device(self) -> str: """ Set a default disk device, in case user does not specify a disk device. diff --git a/src/python/gem5/components/boards/riscv_board.py b/src/python/gem5/components/boards/riscv_board.py index c70216c52d..d0000daffa 100644 --- a/src/python/gem5/components/boards/riscv_board.py +++ b/src/python/gem5/components/boards/riscv_board.py @@ -467,7 +467,7 @@ class RiscvBoard(AbstractSystemBoard, KernelDiskWorkload): fdt.writeDtbFile(os.path.join(outdir, "device.dtb")) @overrides(KernelDiskWorkload) - def get_default_disk_device(self): + def get_disk_device(self): return "/dev/vda" @overrides(KernelDiskWorkload) diff --git a/src/python/gem5/components/boards/x86_board.py b/src/python/gem5/components/boards/x86_board.py index a0db8da10f..01a0ac1f6b 100644 --- a/src/python/gem5/components/boards/x86_board.py +++ b/src/python/gem5/components/boards/x86_board.py @@ -296,7 +296,7 @@ class X86Board(AbstractSystemBoard, KernelDiskWorkload): ] @overrides(KernelDiskWorkload) - def get_default_disk_device(self): + def get_disk_device(self): return "/dev/hda" @overrides(KernelDiskWorkload) diff --git a/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py b/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py index bd7d0acc27..a4e639801d 100644 --- a/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py +++ b/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py @@ -539,7 +539,7 @@ class RISCVMatchedBoard( fdt.writeDtbFile(os.path.join(outdir, "device.dtb")) @overrides(KernelDiskWorkload) - def get_default_disk_device(self): + def get_disk_device(self): return "/dev/vda" @overrides(KernelDiskWorkload) From 98a6cd6ee245502fa2ec46acb9eab4691dec65f8 Mon Sep 17 00:00:00 2001 From: Leo Redivo Date: Wed, 4 Oct 2023 13:32:35 -0700 Subject: [PATCH 6/6] misc: changed call get_default_disk_device to get_disk_device Change-Id: I240da78a658208211ede6648547dfa4c971074a1 --- src/python/gem5/components/boards/kernel_disk_workload.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python/gem5/components/boards/kernel_disk_workload.py b/src/python/gem5/components/boards/kernel_disk_workload.py index c8c6e58878..72b143e6ff 100644 --- a/src/python/gem5/components/boards/kernel_disk_workload.py +++ b/src/python/gem5/components/boards/kernel_disk_workload.py @@ -190,7 +190,7 @@ class KernelDiskWorkload: disk_device=( self._disk_device if self._disk_device - else self.get_default_disk_device() + else self.get_disk_device() ), )