]> xenbits.xensource.com Git - people/dwmw2/xen.git/commitdiff
libxl/PCI: establish per-device reserved memory policy earlier
authorJan Beulich <jbeulich@suse.com>
Thu, 27 Feb 2020 14:44:17 +0000 (15:44 +0100)
committerJan Beulich <jbeulich@suse.com>
Thu, 27 Feb 2020 14:44:17 +0000 (15:44 +0100)
Reserved device memory region processing as well as E820 table creation
happen earlier than the adding of (PCI) devices, yet they consume the
policy (e.g. to decide whether to add entries to the E820 table). But so
far it was only at the stage of PCI device addition that the final
policy was established (i.e. if not explicitly specified by the guest
config file).

Note that I couldn't find the domain ID to be available in
libxl__domain_device_construct_rdm(), but observing that
libxl__device_pci_setdefault() also doesn't use it, for the time being
DOMID_INVALID gets passed. An obvious alternative would be to drop the
unused parameter/argument, yet at that time the question would be
whether to also drop other unused ones.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Wei Liu <wl@xen.org>
tools/libxl/libxl_dm.c
tools/libxl/libxl_internal.h
tools/libxl/libxl_pci.c

index 736f1cecac9f0353726aa0729ca7e062bc857bef..e0c3aa499892c7a3ae0184d1d4d4045e295a4689 100644 (file)
@@ -488,6 +488,11 @@ int libxl__domain_device_construct_rdm(libxl__gc *gc,
 
         assert(xrdm);
 
+        rc = libxl__device_pci_setdefault(gc, DOMID_INVALID,
+                                          &d_config->pcidevs[i], false);
+        if (rc)
+            goto out;
+
         for (n = 0; n < nr_entries; ++n) {
             bool new = true;
 
index 43e5885d1eac2fe80e146a3ebd997021805311d4..4891722a6be719a5946a9d53b824965d282c5964 100644 (file)
@@ -1709,6 +1709,8 @@ _hidden void libxl__device_pci_add(libxl__egc *egc, uint32_t domid,
                                    libxl__ao_device *aodev);
 _hidden void libxl__device_pci_destroy_all(libxl__egc *egc, uint32_t domid,
                                            libxl__multidev *);
+_hidden int libxl__device_pci_setdefault(libxl__gc *gc, uint32_t domid,
+                                         libxl_device_pci *pci, bool hotplug);
 _hidden bool libxl__is_igd_vga_passthru(libxl__gc *gc,
                                         const libxl_domain_config *d_config);
 
index f91bce07ecba914a567c9e310f32553cb51b7ae9..3cf346c23e791eb3df548fb8079e7c115ef7984b 100644 (file)
@@ -1483,8 +1483,8 @@ static int libxl__device_pci_reset(libxl__gc *gc, unsigned int domain, unsigned
     return -1;
 }
 
-static int libxl__device_pci_setdefault(libxl__gc *gc, uint32_t domid,
-                                        libxl_device_pci *pci, bool hotplug)
+int libxl__device_pci_setdefault(libxl__gc *gc, uint32_t domid,
+                                 libxl_device_pci *pci, bool hotplug)
 {
     /* We'd like to force reserve rdm specific to a device by default.*/
     if (pci->rdm_policy == LIBXL_RDM_RESERVE_POLICY_INVALID)