Re: [kvm-unit-tests PATCH v2 1/1] x86: check that clflushopt of an MMIO address succeeds

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ping, any chance of a review?

I'm happy to rework this or merge it with existing tests if required.

On Wednesday, 2020-11-18 at 12:11:29 GMT, David Edmondson wrote:

> Verify that the clflushopt instruction succeeds when applied to an
> MMIO address at both cpl0 and cpl3.
>
> Suggested-by: Joao Martins <joao.m.martins@xxxxxxxxxx>
> Signed-off-by: David Edmondson <david.edmondson@xxxxxxxxxx>
> ---
>  x86/Makefile.common   |  3 ++-
>  x86/clflushopt_mmio.c | 45 +++++++++++++++++++++++++++++++++++++++++++
>  x86/unittests.cfg     |  5 +++++
>  3 files changed, 52 insertions(+), 1 deletion(-)
>  create mode 100644 x86/clflushopt_mmio.c
>
> diff --git a/x86/Makefile.common b/x86/Makefile.common
> index b942086..e11666a 100644
> --- a/x86/Makefile.common
> +++ b/x86/Makefile.common
> @@ -62,7 +62,8 @@ tests-common = $(TEST_DIR)/vmexit.flat $(TEST_DIR)/tsc.flat \
>                 $(TEST_DIR)/init.flat $(TEST_DIR)/smap.flat \
>                 $(TEST_DIR)/hyperv_synic.flat $(TEST_DIR)/hyperv_stimer.flat \
>                 $(TEST_DIR)/hyperv_connections.flat \
> -               $(TEST_DIR)/umip.flat $(TEST_DIR)/tsx-ctrl.flat
> +               $(TEST_DIR)/umip.flat $(TEST_DIR)/tsx-ctrl.flat \
> +               $(TEST_DIR)/clflushopt_mmio.flat
>  
>  test_cases: $(tests-common) $(tests)
>  
> diff --git a/x86/clflushopt_mmio.c b/x86/clflushopt_mmio.c
> new file mode 100644
> index 0000000..f048f58
> --- /dev/null
> +++ b/x86/clflushopt_mmio.c
> @@ -0,0 +1,45 @@
> +#include "libcflat.h"
> +#include "usermode.h"
> +#include "pci.h"
> +#include "x86/asm/pci.h"
> +
> +static volatile int ud;
> +static void *memaddr = (void *)0xfed00000; /* HPET */
> +
> +static void handle_ud(struct ex_regs *regs)
> +{
> +	ud = 1;
> +	regs->rip += 4;
> +}
> +
> +static void try_clflushopt(const char *comment)
> +{
> +	int expected = !this_cpu_has(X86_FEATURE_CLFLUSHOPT);
> +
> +	ud = 0;
> +	/* clflushopt (%rbx): */
> +	asm volatile(".byte 0x66, 0x0f, 0xae, 0x3b" : : "b" (memaddr));
> +
> +	report(ud == expected, comment, expected ? "ABSENT" : "present");
> +}
> +
> +static uint64_t user_clflushopt(void)
> +{
> +	try_clflushopt("clflushopt-mmio@cpl3 (%s)");
> +
> +	return 0;
> +}
> +
> +int main(int ac, char **av)
> +{
> +	bool raised;
> +
> +	setup_vm();
> +
> +	handle_exception(UD_VECTOR, handle_ud);
> +
> +	(void) run_in_user(user_clflushopt, false, 0, 0, 0, 0, &raised);
> +	try_clflushopt("clflushopt-mmio@cpl0 (%s)");
> +
> +	return report_summary();
> +}
> diff --git a/x86/unittests.cfg b/x86/unittests.cfg
> index 872d679..35bedf8 100644
> --- a/x86/unittests.cfg
> +++ b/x86/unittests.cfg
> @@ -359,3 +359,8 @@ extra_params = -M q35,kernel-irqchip=split -device intel-iommu,intremap=on,eim=o
>  file = tsx-ctrl.flat
>  extra_params = -cpu host
>  groups = tsx-ctrl
> +
> +[clflushopt_mmio]
> +file = clflushopt_mmio.flat
> +extra_params = -cpu host
> +arch = x86_64
> -- 
> 2.29.2

dme.
-- 
It's alright, we told you what to dream.



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux