Because initializing a virtio-blk or virtio-scsi device requires a large
amount of memory, you cannot create more than about 10 virtio devices.
Since initialization is required for booting from media, we will not
initialize those devices that are not in the boot order list.

Signed-off-by: Alexey Kirillov <lekir...@yandex-team.ru>
---
 src/hw/virtio-blk.c  | 11 ++++++++++-
 src/hw/virtio-scsi.c | 11 ++++++++++-
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/hw/virtio-blk.c b/src/hw/virtio-blk.c
index 3e615b2..a5e28fc 100644
--- a/src/hw/virtio-blk.c
+++ b/src/hw/virtio-blk.c
@@ -18,7 +18,7 @@
 #include "stacks.h" // run_thread
 #include "std/disk.h" // DISK_RET_SUCCESS
 #include "string.h" // memset
-#include "util.h" // usleep
+#include "util.h" // usleep, bootprio_find_pci_device, is_bootprio_strict
 #include "virtio-pci.h"
 #include "virtio-ring.h"
 #include "virtio-blk.h"
@@ -196,6 +196,8 @@ fail:
 void
 virtio_blk_setup(void)
 {
+    u8 skip_nonbootable = is_bootprio_strict();
+
     ASSERT32FLAT();
     if (! CONFIG_VIRTIO_BLK)
         return;
@@ -208,6 +210,13 @@ virtio_blk_setup(void)
             (pci->device != PCI_DEVICE_ID_VIRTIO_BLK_09 &&
              pci->device != PCI_DEVICE_ID_VIRTIO_BLK_10))
             continue;
+
+        if (skip_nonbootable && bootprio_find_pci_device(pci) < 0) {
+            dprintf(1, "skipping init of a non-bootable virtio-blk at %pP\n",
+                    pci);
+            continue;
+        }
+
         run_thread(init_virtio_blk, pci);
     }
 }
diff --git a/src/hw/virtio-scsi.c b/src/hw/virtio-scsi.c
index e1e2f5d..a27bdc1 100644
--- a/src/hw/virtio-scsi.c
+++ b/src/hw/virtio-scsi.c
@@ -18,7 +18,7 @@
 #include "stacks.h" // run_thread
 #include "std/disk.h" // DISK_RET_SUCCESS
 #include "string.h" // memset
-#include "util.h" // usleep
+#include "util.h" // usleep, bootprio_find_pci_device, is_bootprio_strict
 #include "virtio-pci.h"
 #include "virtio-ring.h"
 #include "virtio-scsi.h"
@@ -205,6 +205,8 @@ fail:
 void
 virtio_scsi_setup(void)
 {
+    u8 skip_nonbootable = is_bootprio_strict();
+
     ASSERT32FLAT();
     if (! CONFIG_VIRTIO_SCSI)
         return;
@@ -217,6 +219,13 @@ virtio_scsi_setup(void)
             (pci->device != PCI_DEVICE_ID_VIRTIO_SCSI_09 &&
              pci->device != PCI_DEVICE_ID_VIRTIO_SCSI_10))
             continue;
+
+        if (skip_nonbootable && bootprio_find_pci_device(pci) < 0) {
+            dprintf(1, "skipping init of a non-bootable virtio-scsi at %pP\n",
+                    pci);
+            continue;
+        }
+
         run_thread(init_virtio_scsi, pci);
     }
 }
-- 
2.17.1
_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-le...@seabios.org

Reply via email to