]> xenbits.xensource.com Git - osstest/seabios.git/commitdiff
virtio: Do not init non-bootable devices
authorAlexey Kirillov <lekiravi@yandex-team.ru>
Tue, 7 Jan 2020 17:19:17 +0000 (20:19 +0300)
committerGerd Hoffmann <kraxel@redhat.com>
Tue, 14 Jan 2020 08:12:45 +0000 (09:12 +0100)
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 <lekiravi@yandex-team.ru>
Message-id: 20200107171917.7535-3-lekiravi@yandex-team.ru
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
src/hw/virtio-blk.c
src/hw/virtio-scsi.c

index 3e615b26aada42b7fb955aa8aafe95b297765c73..a5e28fc858b1e4b036a58e6959ef5952653d2084 100644 (file)
@@ -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);
     }
 }
index e1e2f5d44b27fae635229cdf5dd7d57b6a4101e0..a27bdc1cfbb75939271c9b3eac684a276224cb01 100644 (file)
@@ -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);
     }
 }