summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* tools: drop bogus and obsolete ptyfuncs.m4HEADmasterOlaf Hering2023-05-167-115/+1
| | | | | | | | | | | | | | | | | | | | | | According to openpty(3) it is required to include <pty.h> to get the prototypes for openpty() and login_tty(). But this is not what the function AX_CHECK_PTYFUNCS actually does. It makes no attempt to include the required header. The two source files which call openpty() and login_tty() already contain the conditionals to include the required header. Remove the bogus m4 file to fix build with clang, which complains about calls to undeclared functions. Remove usage of INCLUDE_LIBUTIL_H in libxl_bootloader.c, it is already covered by inclusion of libxl_osdep.h. Remove usage of PTYFUNCS_LIBS in libxl/Makefile, it is already covered by UTIL_LIBS from config/StdGNU.mk. Signed-off-by: Olaf Hering <olaf@aepfle.de> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
* tools: Fix install.sh for systemdOlaf Hering2023-05-166-4/+5
| | | | | | | | | | | | | | | | | | | | | | On a fedora system, if you run `sudo sh install.sh` you break your system. The installation clobbers /var/run, a symlink to /run. A subsequent boot fails when /var/run and /run are different since accesses through /var/run can't find items that now only exist in /run and vice-versa. Skip populating /var/run/xen during make install. The directory is already created by some scripts. Adjust all remaining scripts to create XEN_RUN_DIR at runtime. Use the shell variable XEN_RUN_DIR instead of hardcoded paths. XEN_RUN_STORED is covered by XEN_RUN_DIR because xenstored is usually started afterwards. Reported-by: Jason Andryuk <jandryuk@gmail.com> Signed-off-by: Olaf Hering <olaf@aepfle.de> Tested-by: Jason Andryuk <jandryuk@gmail.com> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
* tools: convert bitfields to unsigned typeOlaf Hering2023-05-162-7/+7
| | | | | | | | | | | | clang complains about the signed type: implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1 [-Wsingle-bit-bitfield-constant-conversion] The potential ABI change in libxenvchan is covered by the Xen version based SONAME. Signed-off-by: Olaf Hering <olaf@aepfle.de> Reviewed-by: Juergen Gross <jgross@suse.com> Acked-by: Anthony PERARD <anthony.perard@citrix.com>
* x86: Add support for CpuidUserDisAlejandro Vallejo2023-05-163-13/+49
| | | | | | | | Because CpuIdUserDis is reported in CPUID itself, the extended leaf containing that bit must be retrieved before calling c_early_init() Signed-off-by: Alejandro Vallejo <alejandro.vallejo@cloud.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
* x86: Refactor conditional guard in probe_cpuid_faulting()Alejandro Vallejo2023-05-163-15/+23
| | | | | | | | | | | Move vendor-specific checks to the vendor-specific callers. While at it move the synth cap setters to the callers too, as it's needed for a later patch and it's not a functional change either. No functional change. Signed-off-by: Alejandro Vallejo <alejandro.vallejo@cloud.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
* x86/amd: fix legacy setting of SSBD on AMD Family 17hRoger Pau Monne2023-05-161-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current logic to set SSBD on AMD Family 17h and Hygon Family 18h processors requires that the setting of SSBD is coordinated at a core level, as the setting is shared between threads. Logic was introduced to keep track of how many threads require SSBD active in order to coordinate it, such logic relies on using a per-core counter of threads that have SSBD active. Given the current logic, it's possible for a guest to under or overflow the thread counter, because each write to VIRT_SPEC_CTRL.SSBD by the guest gets propagated to the helper that does the per-core active accounting. Overflowing the counter is not so much of an issue, as this would just make SSBD sticky. Underflowing however is more problematic: on non-debug Xen builds a guest can perform empty writes to VIRT_SPEC_CTRL that would cause the counter to underflow and thus the value gets saturated to the max value of unsigned int. At which points attempts from any thread to set VIRT_SPEC_CTRL.SSBD won't get propagated to the hardware anymore, because the logic will see that the counter is greater than 1 and assume that SSBD is already active, effectively loosing the setting of SSBD and the protection it provides. Fix this by introducing a per-CPU variable that keeps track of whether the current thread has legacy SSBD active or not, and thus only attempt to propagate the value to the hardware once the thread selected value changes. This is XSA-431 / CVE-2022-42336 Fixes: b2030e6730a2 ('amd/virt_ssbd: set SSBD at vCPU context switch') Reported-by: Andrew Cooper <andrew.cooper3@citrix.com> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
* automation: remove python2 from opensuse imagesOlaf Hering2023-05-152-3/+0
| | | | | | | | | | The upcoming Leap 15.5 will come without a binary named 'python'. Prepare the suse images for that change. Starting with Xen 4.14 python3 can be used for build. Signed-off-by: Olaf Hering <olaf@aepfle.de> Acked-by: Stefano Stabellini <sstabellini@kernel.org>
* automation: provide diffutils and ghostscript in opensuse imagesOlaf Hering2023-05-152-0/+4
| | | | | | | | | | | | The diffutils package is a hard requirement for building xen. It was dropped from the Tumbleweed base image in the past 12 months. Building with --enable-docs does now require the gs tool. Add both packages to the suse dockerfiles. Signed-off-by: Olaf Hering <olaf@aepfle.de> Acked-by: Stefano Stabellini <sstabellini@kernel.org>
* automation: add x86_64 tests on a AMD Zen3+ runnerMarek Marczykowski-Górecki2023-05-151-0/+26
| | | | | | | | | | | | | | | | | | | | | This adds another physical runner to Gitlab-CI, running similar set of jobs that the Adler Lake one. The machine specifically is MinisForum UM773 Lite with AMD Ryzen 7 7735HS The PV passthrough test is skipped as currently it fails on this system with: (d1) Can't find new memory area for initrd needed due to E820 map conflict The S3 test is skipped as it currently fails - the system seems to suspend properly (power LED blinks), but when woken up the power LED gets back to solid on and the fan spins at top speed and but otherwise there is no signs of if life from the system (no output on the console, HDMI or anything else). Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
* automation: enable earlyprintk=xen for both dom0 and domU in hw testsMarek Marczykowski-Górecki2023-05-151-2/+2
| | | | | | | Make debugging early boot failures easier based on just CI logs. Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
* automation: make console options configurable via variablesMarek Marczykowski-Górecki2023-05-152-1/+2
| | | | | | | | | | This makes the test script easier reusable for different runners, where console may be connected differently. Include both console= option and configuration for specific chosen console too (like com1= here) in the 'CONSOLE_OPTS' variable. Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
* automation: add a Dom0 PVH test based on Qubes' runnerStefano Stabellini2023-05-152-5/+17
| | | | | | | | Straightforward Dom0 PVH test based on the existing basic Smoke test for the Qubes runner. Signed-off-by: Stefano Stabellini <stefano.stabellini@amd.com> Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
* x86/cpuid: Calculate FEATURESET_NR_ENTRIES more helpfullyAndrew Cooper2023-05-151-6/+36
| | | | | | | | | | | | | | | | | | | | When adding new featureset words, it is convenient to split the work into several patches. However, GCC 12 spotted that the way we prefer to split the work results in a real (transient) breakage whereby the policy <-> featureset helpers perform out-of-bounds accesses on the featureset array. Fix this by having gen-cpuid.py calculate FEATURESET_NR_ENTRIES from the comments describing the word blocks, rather than from the XEN_CPUFEATURE() with the greatest value. For simplicty, require that the word blocks appear in order. This can be revisted if we find a good reason to have blocks out of order. No functional change. Reported-by: Jan Beulich <jbeulich@suse.com> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
* xen/arm: domain_build: Fix format specifiers in map_{dt_}irq_to_domain()Michal Orzel2023-05-151-9/+5
| | | | | | | | | | | | IRQ is of unsigned type so %u should be used. When printing domain id, %pd should be the correct format to maintain the consistency. Also, wherever possible, reduce the number of split lines for printk(). Signed-off-by: Michal Orzel <michal.orzel@amd.com> Reviewed-by: Henry Wang <Henry.Wang@arm.com> Reviewed-by: Julien Grall <jgrall@amazon.com> Reviewed-by: Ayan Kumar Halder <ayan.kumar.halder@amd.com>
* xen/arm: domain_build: Propagate return code of map_irq_to_domain()Michal Orzel2023-05-151-1/+1
| | | | | | | | | | | | | From map_dt_irq_to_domain() we are assigning a return code of map_irq_to_domain() to a variable without checking it for an error. Fix it by propagating the return code directly since this is the last call. Fixes: 467e5cbb2ffc ("xen: arm: consolidate mmio and irq mapping to dom0") Signed-off-by: Michal Orzel <michal.orzel@amd.com> Reviewed-by: Julien Grall <jgrall@amazon.com> Reviewed-by: Henry Wang <Henry.Wang@arm.com> Reviewed-by: Ayan Kumar Halder <ayan.kumar.halder@amd.com>
* xen/arm: smmuv3: Advertise coherent table walk if supportedMichal Orzel2023-05-151-1/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | At the moment, even in case of a SMMU being I/O coherent, we clean the updated PT as a result of not advertising the coherency feature. SMMUv3 coherency feature means that page table walks, accesses to memory structures and queues are I/O coherent (refer ARM IHI 0070 E.A, 3.15). Follow the same steps that were done for SMMU v1,v2 driver by the commit: 080dcb781e1bc3bb22f55a9dfdecb830ccbabe88 The same restrictions apply, meaning that in order to advertise coherent table walk platform feature, all the SMMU devices need to report coherency feature. This is because the page tables (we are sharing them with CPU) are populated before any device assignment and in case of a device being behind non-coherent SMMU, we would have to scan the tables and clean the cache. It is to be noted that the SBSA/BSA (refer ARM DEN0094C 1.0C, section D) requires that all SMMUv3 devices support I/O coherency. Signed-off-by: Michal Orzel <michal.orzel@amd.com> Reviewed-by: Ayan Kumar Halder <ayan.kumar.halder@amd.com> Reviewed-by: Rahul Singh <rahul.singh@arm.com> [julien: Add __ro_after_init] Reviewed-by: Julien Grall <jgrall@amazon.com>
* xen/arm: smmuv3: Constify arm_smmu_get_by_dev() parameterMichal Orzel2023-05-151-2/+2
| | | | | | | | | | This function does not modify its parameter 'dev' and it is not supposed to do it. Therefore, constify it. Signed-off-by: Michal Orzel <michal.orzel@amd.com> Reviewed-by: Rahul Singh <rahul.singh@arm.com> Reviewed-by: Henry Wang <Henry.Wang@arm.com> Reviewed-by: Ayan Kumar Halder <ayan.kumar.halder@amd.com>
* iommu/amd-vi: fix assert comparing boolean to enumRoger Pau Monné2023-05-121-1/+1
| | | | | | | | | Or else when iommu_intremap is set to iommu_intremap_full the assert triggers. Fixes: 1ba66a870eba ('AMD/IOMMU: without XT, x2APIC needs to be forced into physical mode') Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
* SUPPORT.md: explicitly mention EFI (secure) boot statusJan Beulich2023-05-121-0/+10
| | | | | | | | | | | While normal booting is properly supported on both x86 and Arm64, secure boot reportedly requires quite a bit more work to be actually usable (and providing the intended guarantees). The mere use of the shim protocol for verifying the Dom0 kernel image isn't enough. Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Julien Grall <jgrall@amazon.com>
* xen/arm: pci: fix -Wtype-limits warning in pci-host-common.cStewart Hildebrand2023-05-111-2/+4
| | | | | | | | | | | | | | | | | | When building with EXTRA_CFLAGS_XEN_CORE="-Wtype-limits", we observe the following warning: arch/arm/pci/pci-host-common.c: In function ‘pci_host_common_probe’: arch/arm/pci/pci-host-common.c:238:26: warning: comparison is always false due to limited range of data type [-Wtype-limits] 238 | if ( bridge->segment < 0 ) | ^ This is due to bridge->segment being an unsigned type. Fix it by introducing a new variable of signed type to use in the condition. Fixes: 6ec9176d94ae ("xen/arm: PCI host bridge discovery within XEN on ARM") Signed-off-by: Stewart Hildebrand <stewart.hildebrand@amd.com> Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com> Reviewed-by: Rahul Singh <rahul.singh@arm.com<mailto:rahul.singh@arm.com>>
* domctl: bump interface versionJan Beulich2023-05-111-1/+1
| | | | | | | | | | The change to XEN_DOMCTL_getdomaininfo was a binary incompatible one, and the interface version wasn't bumped yet during the 4.18 release cycle. Fixes: 31c655497461 ("domctl: Modify XEN_DOMCTL_getdomaininfo to fail if domid is not found") Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
* x86: Add AMD's CpuidUserDis bit definitionsAlejandro Vallejo2023-05-114-0/+5
| | | | | | | | | | AMD reports support for CpuidUserDis in CPUID and provides the toggle in HWCR. This patch adds the positions of both of those bits to both xen and tools. No functional change. Signed-off-by: Alejandro Vallejo <alejandro.vallejo@cloud.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
* domctl: Modify XEN_DOMCTL_getdomaininfo to fail if domid is not foundAlejandro Vallejo2023-05-103-148/+2
| | | | | | | | | | | | | | | | | | | | | | | | It previously mimicked the getdomaininfo sysctl semantics by returning the first domid higher than the requested domid that does exist. This unintuitive behaviour causes quite a few mistakes and makes the call needlessly slow in its error path. This patch removes the fallback search, returning -ESRCH if the requested domain doesn't exist. Domain discovery can still be done through the sysctl interface as that performs a linear search on the list of domains. With this modification the xc_domain_getinfo() function is deprecated and removed to make sure it's not mistakenly used expecting the old behaviour. The new xc wrapper is xc_domain_getinfo_single(). All previous callers of xc_domain_getinfo() have been updated to use xc_domain_getinfo_single() or xc_domain_getinfolist() instead. This also means xc_dominfo_t is no longer used by anything and can be purged. Resolves: xen-project/xen#105 Signed-off-by: Alejandro Vallejo <alejandro.vallejo@cloud.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Anthony PERARD <anthony.perard@citrix.com>
* tools: Use new xc function for some xc_domain_getinfo() callsAlejandro Vallejo2023-05-1030-184/+159
| | | | | | | | | Move calls that require a information about a single precisely identified domain to the new xc_domain_getinfo_single(). Signed-off-by: Alejandro Vallejo <alejandro.vallejo@cloud.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Anthony PERARD <anthony.perard@citrix.com>
* tools: Modify single-domid callers of xc_domain_getinfolist()Alejandro Vallejo2023-05-107-47/+29
| | | | | | | | | | | | | | xc_domain_getinfolist() internally relies on a sysctl that performs a linear search for the domids. Many callers of xc_domain_getinfolist() who require information about a precise domid are much better off calling xc_domain_getinfo_single() instead, that will use the getdomaininfo domctl instead and ensure the returned domid matches the requested one. The domtctl will find the domid faster too, because that uses hashed lists. Signed-off-by: Alejandro Vallejo <alejandro.vallejo@cloud.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Christian Lindig <christian.lindig@cloud.com> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
* x86/ucode: Refresh raw CPU policy after microcode loadAndrew Cooper2023-05-103-3/+13
| | | | | | | | | | | | | | | | | | Loading microcode can cause new features to appear. This has happened routinely since Spectre/Meltdown, and even the presence of new status bits can sometimes mean the administrator has no further actions to perform. Conversely, loading microcode can occasionally cause features to disappear. As with livepatching, it is very much the administrators responsibility to confirm that a late microcode load is safe on the intended system before rolling it out in production. Refresh the raw CPU policy after late microcode load appears to have done something, so xen-cpuid can reflect the updated state of the system. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> Acked-by: Roger Pau Monné <roger.pau@citrix.com>
* automation: xilinx: Add GEM passthrough testMichal Orzel2023-05-092-0/+33
| | | | | | | | | | | | | | | | | Being able to access a real board with real resources gives a great opportunity to finally test passthroughing devices to guests. Therefore, create a new Xilinx job to test GEM (Gigabit Ethernet MAC) controller passthrough to a dom0less domU. By passing "gem-passthrough" as a test variant, the test will instruct the ImageBuilder to use "eth0.dtb" (passthrough dtb stored under tftp server root) as a guest dtb and to add "xen,passthrough" dtb property to "/amba/ethernet@ff0e0000" node. The guest itself will try to bringup the network interface, obtain dynamically IP address and ping the default gateway. Signed-off-by: Michal Orzel <michal.orzel@amd.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
* automation: xilinx: Set up bridging only for a default test caseMichal Orzel2023-05-091-7/+8
| | | | | | | | | | | At the moment, setting up a network bridge is unconditionally placed in the dom0 xen.start script. Since we might want to use the network interface (there is only one working GEM on the board) for other tests (e.g. passthrough), move the bridge setup to a dom0_check variable being part of a default ping test (i.e. if no test variant specified). Signed-off-by: Michal Orzel <michal.orzel@amd.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
* docs/man: fix xenstore-write synopsisYann Dirson2023-05-091-1/+1
| | | | | | Reported-by: zithro <slack@rabbit.lu> Signed-off-by: Yann Dirson <yann.dirson@vates.fr> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
* LICENSES: Remove the use of deprecated SPDX tagsAndrew Cooper2023-05-0916-30/+33
| | | | | | | | | | | | | | | | | | The GPL and LGPL SPDX forms without an explicit -only or -or-later suffix are deprecated and should not be used. Update the documention. Somewhat unhelpfully at the time of writing, this only appears to be indicated by the separation of the two tables at https://spdx.org/licenses/ The recent changes to libacpi are the only examples of deprecated LGPL tags in tree, so fix them all up. For GPL, we have many examples using deprecated tags. For now, just identify them as such and recommend that no new instances get added. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Jan Beulich <jbeulich@suse.com> Acked-by: Stefano Stabellini <sstabellini@kernel.org>
* LICENSES: Improve the legibility of these filesAndrew Cooper2023-05-098-0/+39
| | | | | | | | A few newlines go a very long way. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Jan Beulich <jbeulich@suse.com> Acked-by: Stefano Stabellini <sstabellini@kernel.org>
* ns16550: enable memory decoding on MMIO-based PCI console cardMarek Marczykowski-Górecki2023-05-081-0/+8
| | | | | | | | | | | | | | | | | | pci_serial_early_init() enables PCI_COMMAND_IO for IO-based UART devices, add setting PCI_COMMAND_MEMORY for MMIO-based UART devices too. Note the MMIO-based devices in practice need a "pci" sub-option, otherwise a few parameters are not initialized (including bar_idx, reg_shift, reg_width etc). The "pci" is not supposed to be used with explicit BDF, so do not key setting PCI_COMMAND_MEMORY on explicit BDF being set. Contrary to the IO-based UART, pci_serial_early_init() will not attempt to set BAR0 address, even if user provided io_base manually - in most cases, those are with an offest and the current cmdline syntax doesn't allow expressing it. Due to this, enable PCI_COMMAND_MEMORY only if uart->bar is already populated. In similar spirit, this patch does not support setting BAR0 of the bridge. Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> Acked-by: Jan Beulich <jbeulich@suse.com>
* acpi: add TPM2 interface definitionJennifer Herbert2023-05-087-2/+115
| | | | | | | | | This patch introduces an optional TPM 2 interface definition to the ACPI table, which is to be used as part of a vTPM 2 implementation. Signed-off-by: Jennifer Herbert <jennifer.herbert@citrix.com> Reviewed-by: Jason Andryuk <jandryuk@gmail.com> Acked-by: Jan Beulich <jbeulich@suse.com>
* acpi: make TPM version configurableJennifer Herbert2023-05-084-38/+70
| | | | | | | | | | | This patch makes the TPM version, for which the ACPI library probes, configurable. If acpi_config.tpm_verison is set to 1, it indicates that 1.2 (TCPA) should be probed. I have also added to hvmloader an option to allow setting this new config, which can be triggered by setting the platform/tpm_verion xenstore key. Signed-off-by: Jennifer Herbert <jennifer.herbert@citrix.com> Reviewed-by: Jason Andryuk <jandryuk@gmail.com> Acked-by: Jan Beulich <jbeulich@suse.com>
* libacpi: switch to SPDXJan Beulich2023-05-0514-590/+13
| | | | | | | | | | | | | | | | Commit 68823df358e8 ("acpi: Re-license ACPI builder files from GPLv2 to LGPLv2.1") added references to a "special exception on linking described in file LICENSE", without actually adding such a file. Quite likely COPYING was meant instead, yet then its text matches LICENSES/LGPL-2.1 except for some explanatory text (clarifying the "only" aspect) at the top (and formatting). Hence replace the text in all the files with SPDX references to LGPL-2.1. Note that dsdt_acpi_info.asl had no license text. An SPDX tag is being added there nevertheless. Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
* build: omit "source" symlink when building hypervisor in-treeJan Beulich2023-05-053-3/+7
| | | | | | | | | This symlink is getting in the way of using e.g. "find" on the xen/ subtree, and it isn't really needed when not building out-of-tree: The one use that there was can easily be avoided. Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
* build: don't export building_out_of_srctreeJan Beulich2023-05-053-3/+3
| | | | | | | | | | | I don't view a variable of this name as suitable for exporting, the more that it carries entirely redundant information. The reasons for its introduction in Linux commit 051f278e9d81 ("kbuild: replace KBUILD_SRCTREE with boolean building_out_of_srctree") also don't apply to us. Ditch exporting of the variable, replacing uses suitably. Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
* tools/xen-ucode: print information about currently loaded ucodeSergey Dyasli2023-05-031-10/+75
| | | | | | | | | | | | | | Add an option to xen-ucode tool to print the currently loaded ucode revision and also print it during usage info. Print CPU signature and platform flags as well. The raw data comes from XENPF_get_cpu_version and XENPF_get_ucode_revision platform ops. Example output: Intel: CPU signature 06-55-04 (raw 0x00050654) pf 0x1 revision 0x02006e05 AMD: CPU signature 19-01-01 (raw 0x00a00f11) revision 0x0a0011ce Signed-off-by: Sergey Dyasli <sergey.dyasli@citrix.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
* x86/platform: introduce XENPF_get_ucode_revisionSergey Dyasli2023-05-036-0/+65
| | | | | | | | | | | | Currently it's hard to get CPU's microcode revision from Xen after late loading without looking into Xen logs, which is not always convenient. Add a new platform op in order to get the required data from Xen and provide a wrapper for libxenctrl. Signed-off-by: Sergey Dyasli <sergey.dyasli@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
* tools/xenctrl: add xc_get_cpu_version()Sergey Dyasli2023-05-032-0/+18
| | | | | | | As a wrapper for XENPF_get_cpu_version platform op. Signed-off-by: Sergey Dyasli <sergey.dyasli@citrix.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
* tools/libs/guest: assist gcc13's realloc analyzerOlaf Hering2023-05-031-10/+6
| | | | | | | | | | | | | | | | | | | | | gcc13 fails to track the allocated memory in backup_ptes: xg_offline_page.c: In function 'backup_ptes': xg_offline_page.c:191:13: error: pointer 'orig' may be used after 'realloc' [-Werror=use-after-free] 191 | free(orig); Assist the analyzer by slightly rearranging the code: In case realloc succeeds, the previous allocation is either extended or released internally. In case realloc fails, the previous allocation is left unchanged. Return an error in this case, the caller will release the currently allocated memory in its error path. http://bugzilla.suse.com/show_bug.cgi?id=1210570 Signed-off-by: Olaf Hering <olaf@aepfle.de> Reviewed-by: Juergen Gross <jgross@suse.com> Compile-tested-by: Jason Andryuk <jandryuk@gmail.com> Acked-by: Jan Beulich <jbeulich@suse.com>
* libxl: fix matching of generic virtio deviceViresh Kumar2023-05-031-4/+8
| | | | | | | | | | | The strings won't be an exact match, as we are only looking to match the prefix here, i.e. "virtio,device". This is already done properly in libxl_virtio.c file, lets do the same here too. Fixes: 43ba5202e2ee ("libxl: add support for generic virtio device") Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> Acked-by: Anthony PERARD <anthony.perard@citrix.com>
* x86/mm: replace bogus assertion in paging_log_dirty_op()Jan Beulich2023-05-031-2/+2
| | | | | | | | | | | While I was the one to introduce it, I don't think it is correct: A bogus continuation call issued by a tool stack domain may find another continuation in progress. IOW we've been asserting caller controlled state (which is reachable only via a domctl), and the early (lock-less) check in paging_domctl() helps in a limited way only. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Roger Pau Monné <roger.pau@citrix.com>
* x86/trampoline: load the GDT located in the trampoline pageRoger Pau Monné2023-05-031-0/+3
| | | | | | | | | | | | | | | | | | | | | | | When booting the BSP the portion of the code executed from the trampoline page will be using the GDT located in the hypervisor .text.head section rather than the GDT located in the relocated trampoline page. If skip_realmode is not set the GDT located in the trampoline page will be loaded after having executed the BIOS call, otherwise the GDT from .text.head will be used for all the protected mode trampoline code execution. Note that both gdt_boot_descr and gdt_48 contain the same entries, but the former is located inside the hypervisor .text section, while the later lives in the relocated trampoline page. This is not harmful as-is, as both GDTs contain the same entries, but for consistency with the APs switch the BSP trampoline code to also use the GDT on the relocated trampoline page. Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
* x86/head: check base address alignmentRoger Pau Monné2023-05-031-0/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Ensure that the base address is 2M aligned, or else the page table entries created would be corrupt as reserved bits on the PDE end up set. We have encountered a broken firmware where grub2 would end up loading Xen at a non 2M aligned region when using the multiboot2 protocol, and that caused a very difficult to debug triple fault. If the alignment is not as required by the page tables print an error message and stop the boot. Also add a build time check that the calculation of symbol offsets don't break alignment of passed addresses. The check could be performed earlier, but so far the alignment is required by the page tables, and hence feels more natural that the check lives near to the piece of code that requires it. Note that when booted as an EFI application from the PE entry point the alignment check is already performed by efi_arch_load_addr_check(), and hence there's no need to add another check at the point where page tables get built in efi_arch_memory_setup(). Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
* xen/vcpu: ignore VCPU_SSHOTTMR_futureRoger Pau Monné2023-05-033-4/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The usage of VCPU_SSHOTTMR_future in Linux prior to 4.7 is bogus. When the hypervisor returns -ETIME (timeout in the past) Linux keeps retrying to setup the timer with a higher timeout instead of self-injecting a timer interrupt. On boxes without any hardware assistance for logdirty we have seen HVM Linux guests < 4.7 with 32vCPUs give up trying to setup the timer when logdirty is enabled: CE: Reprogramming failure. Giving up CE: xen increased min_delta_ns to 1000000 nsec CE: Reprogramming failure. Giving up CE: Reprogramming failure. Giving up CE: xen increased min_delta_ns to 506250 nsec CE: xen increased min_delta_ns to 759375 nsec CE: xen increased min_delta_ns to 1000000 nsec CE: Reprogramming failure. Giving up CE: Reprogramming failure. Giving up CE: Reprogramming failure. Giving up Freezing user space processes ... INFO: rcu_sched detected stalls on CPUs/tasks: { 14} (detected by 10, t=60002 jiffies, g=4006, c=4005, q=14130) Task dump for CPU 14: swapper/14 R running task 0 0 1 0x00000000 Call Trace: [<ffffffff90160f5d>] ? rcu_eqs_enter_common.isra.30+0x3d/0xf0 [<ffffffff907b9bde>] ? default_idle+0x1e/0xd0 [<ffffffff90039570>] ? arch_cpu_idle+0x20/0xc0 [<ffffffff9010820a>] ? cpu_startup_entry+0x14a/0x1e0 [<ffffffff9005d3a7>] ? start_secondary+0x1f7/0x270 [<ffffffff900000d5>] ? start_cpu+0x5/0x14 INFO: rcu_sched detected stalls on CPUs/tasks: { 26} (detected by 24, t=60002 jiffies, g=6922, c=6921, q=7013) Task dump for CPU 26: swapper/26 R running task 0 0 1 0x00000000 Call Trace: [<ffffffff90160f5d>] ? rcu_eqs_enter_common.isra.30+0x3d/0xf0 [<ffffffff907b9bde>] ? default_idle+0x1e/0xd0 [<ffffffff90039570>] ? arch_cpu_idle+0x20/0xc0 [<ffffffff9010820a>] ? cpu_startup_entry+0x14a/0x1e0 [<ffffffff9005d3a7>] ? start_secondary+0x1f7/0x270 [<ffffffff900000d5>] ? start_cpu+0x5/0x14 INFO: rcu_sched detected stalls on CPUs/tasks: { 26} (detected by 24, t=60002 jiffies, g=8499, c=8498, q=7664) Task dump for CPU 26: swapper/26 R running task 0 0 1 0x00000000 Call Trace: [<ffffffff90160f5d>] ? rcu_eqs_enter_common.isra.30+0x3d/0xf0 [<ffffffff907b9bde>] ? default_idle+0x1e/0xd0 [<ffffffff90039570>] ? arch_cpu_idle+0x20/0xc0 [<ffffffff9010820a>] ? cpu_startup_entry+0x14a/0x1e0 [<ffffffff9005d3a7>] ? start_secondary+0x1f7/0x270 [<ffffffff900000d5>] ? start_cpu+0x5/0x14 Thus leading to CPU stalls and a broken system as a result. Workaround this bogus usage by ignoring the VCPU_SSHOTTMR_future in the hypervisor. Old Linux versions are the only ones known to have (wrongly) attempted to use the flag, and ignoring it is compatible with the behavior expected by any guests setting that flag. Note the usage of the flag has been removed from Linux by commit: c06b6d70feb3 xen/x86: don't lose event interrupts Which landed in Linux 4.7. Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Acked-by: Henry Wang <Henry.Wang@arm.com> # CHANGELOG Acked-by: Jan Beulich <jbeulich@suse.com>
* docs: allow generic virtio device types to contain device-idViresh Kumar2023-05-031-2/+5
| | | | | | | | | | | | | | | | | For generic virtio devices, where we don't need to add compatible or other special DT properties, the type field is set to "virtio,device". But this misses the case where the user sets the type with a valid virtio device id as well, like "virtio,device1a" for file system device. The complete list of virtio device ids is mentioned here: https://docs.oasis-open.org/virtio/virtio/v1.2/cs01/virtio-v1.2-cs01.html#x1-2160005 Update documentation to support that as well. Fixes: dd54ea500be8 ("docs: add documentation for generic virtio devices") Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
* xen/sysctl: fix XEN_SYSCTL_getdomaininfolist handling with XSMJuergen Gross2023-05-021-2/+1
| | | | | | | | | | | | | | In case XSM is active, the handling of XEN_SYSCTL_getdomaininfolist can fail if the last domain scanned isn't allowed to be accessed by the calling domain (i.e. xsm_getdomaininfo(XSM_HOOK, d) is failing). Fix that by just ignoring scanned domains where xsm_getdomaininfo() is returning an error, like it is effectively done when such a situation occurs for a domain not being the last one scanned. Fixes: d046f361dc93 ("Xen Security Modules: XSM") Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
* xen/riscv: update two license headersAyan Kumar Halder2023-05-022-4/+2
| | | | | | | | Updated the license header in a separate comment of its own. Signed-off-by: Ayan Kumar Halder <ayan.kumar.halder@amd.com> Reviewed-by: Oleksii Kurochko <oleksii.kurochko@gmail.com> Acked-by: Jan Beulich <jbeulich@suse.com>
* x86/mm: drop log-dirty-enable's log_global parameterJan Beulich2023-05-025-28/+20
| | | | | | | | | As of XSA-397 the only caller passes true for it. Simplify things by getting rid of the parameter for both the internal paging function and the involved hook. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>