Skip to content

Commit

Permalink
python,stdlib: Support added for multiple disk boards
Browse files Browse the repository at this point in the history
Change-Id: I21d30660bb4dc126ce418f3252f0feb65b41ee0c
  • Loading branch information
amatabsc committed Mar 11, 2024
1 parent bbde68c commit 5130311
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 6 deletions.
2 changes: 1 addition & 1 deletion src/python/gem5/components/boards/arm_board.py
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ def get_disk_device(self):
return "/dev/vda"

@overrides(KernelDiskWorkload)
def _add_disk_to_board(self, disk_image: AbstractResource):
def _add_disk_to_board(self, disk_image: AbstractResource, is_root: bool):
self._image = CowDiskImage(
child=RawDiskImage(
read_only=True, image_file=disk_image.get_local_path()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -557,7 +557,7 @@ def get_default_kernel_args(self) -> List[str]:
]

@overrides(KernelDiskWorkload)
def _add_disk_to_board(self, disk_image: AbstractResource) -> None:
def _add_disk_to_board(self, disk_image: AbstractResource, is_root: bool):
# Note: This must be called after set_workload because it looks for an
# attribute named "disk" and connects

Expand Down
19 changes: 18 additions & 1 deletion src/python/gem5/components/boards/kernel_disk_workload.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,17 @@ def _add_disk_to_board(self, disk_image: DiskImageResource) -> None:
"""
raise NotImplementedError

@abstractmethod
def _finalize_workload(self) -> None:
"""
Finalizes the board setup dependent on the workload.
This function connects the IO devices to the board, generates the
device tree and expose the location of the dtb to the gem5's workload
object. This function should be called after all IO devices are set up
(e.g. disk images, PIO devices.)
"""
raise NotImplementedError

def get_disk_root_partition(
cls, disk_image: DiskImageResource
) -> Optional[str]:
Expand Down Expand Up @@ -145,6 +156,7 @@ def set_kernel_disk_workload(
disk_image: DiskImageResource,
bootloader: Optional[BootloaderResource] = None,
disk_device: Optional[str] = None,
additional_disks: List[DiskImageResource] = [],
readfile: Optional[str] = None,
readfile_contents: Optional[str] = None,
kernel_args: Optional[List[str]] = None,
Expand Down Expand Up @@ -223,7 +235,12 @@ def set_kernel_disk_workload(
file.write(readfile_contents)
file.close()

self._add_disk_to_board(disk_image=disk_image)
self._add_disk_to_board(disk_image=disk_image, is_root=True)
if additional_disks != []:
for disk_image in additional_disks:
self._add_disk_to_board(disk_image=disk_image, is_root=False)
# Finalize the setup after all components of the workload are set.
self._finalize_workload()

# Set whether to exit on work items.
self.exit_on_work_items = exit_on_work_items
Expand Down
2 changes: 1 addition & 1 deletion src/python/gem5/components/boards/riscv_board.py
Original file line number Diff line number Diff line change
Expand Up @@ -510,7 +510,7 @@ def _pre_instantiate(self):
self._connect_things()

@overrides(KernelDiskWorkload)
def _add_disk_to_board(self, disk_image: AbstractResource):
def _add_disk_to_board(self, disk_image: AbstractResource, is_root: bool):
image = CowDiskImage(
child=RawDiskImage(read_only=True), read_only=False
)
Expand Down
2 changes: 1 addition & 1 deletion src/python/gem5/components/boards/x86_board.py
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ def get_disk_device(self):
return "/dev/hda"

@overrides(KernelDiskWorkload)
def _add_disk_to_board(self, disk_image: AbstractResource):
def _add_disk_to_board(self, disk_image: AbstractResource, is_root: bool):
ide_disk = IdeDisk()
ide_disk.driveID = "device0"
ide_disk.image = CowDiskImage(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -578,7 +578,7 @@ def get_disk_device(self):
return "/dev/vda"

@overrides(KernelDiskWorkload)
def _add_disk_to_board(self, disk_image: AbstractResource):
def _add_disk_to_board(self, disk_image: AbstractResource, is_root: bool):
image = CowDiskImage(
child=RawDiskImage(read_only=True), read_only=False
)
Expand Down

0 comments on commit 5130311

Please sign in to comment.