Merge tag 'kvm-riscv-6.6-1' of https://github.com/kvm-riscv/linux into HEAD
authorPaolo Bonzini <pbonzini@redhat.com>
Thu, 31 Aug 2023 17:25:55 +0000 (13:25 -0400)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 31 Aug 2023 17:25:55 +0000 (13:25 -0400)
KVM/riscv changes for 6.6

- Zba, Zbs, Zicntr, Zicsr, Zifencei, and Zihpm support for Guest/VM
- Added ONE_REG interface for SATP mode
- Added ONE_REG interface to enable/disable multiple ISA extensions
- Improved error codes returned by ONE_REG interfaces
- Added KVM_GET_REG_LIST ioctl() implementation for KVM RISC-V
- Added get-reg-list selftest for KVM RISC-V

1  2 
tools/testing/selftests/kvm/Makefile
tools/testing/selftests/kvm/include/test_util.h

@@@ -23,7 -23,6 +23,7 @@@ LIBKVM += lib/guest_modes.
  LIBKVM += lib/io.c
  LIBKVM += lib/kvm_util.c
  LIBKVM += lib/memstress.c
 +LIBKVM += lib/guest_sprintf.c
  LIBKVM += lib/rbtree.c
  LIBKVM += lib/sparsebit.c
  LIBKVM += lib/test_util.c
@@@ -123,7 -122,6 +123,7 @@@ TEST_GEN_PROGS_x86_64 += access_trackin
  TEST_GEN_PROGS_x86_64 += demand_paging_test
  TEST_GEN_PROGS_x86_64 += dirty_log_test
  TEST_GEN_PROGS_x86_64 += dirty_log_perf_test
 +TEST_GEN_PROGS_x86_64 += guest_print_test
  TEST_GEN_PROGS_x86_64 += hardware_disable_test
  TEST_GEN_PROGS_x86_64 += kvm_create_max_vcpus
  TEST_GEN_PROGS_x86_64 += kvm_page_table_test
@@@ -142,7 -140,6 +142,6 @@@ TEST_GEN_PROGS_EXTENDED_x86_64 += x86_6
  TEST_GEN_PROGS_aarch64 += aarch64/aarch32_id_regs
  TEST_GEN_PROGS_aarch64 += aarch64/arch_timer
  TEST_GEN_PROGS_aarch64 += aarch64/debug-exceptions
- TEST_GEN_PROGS_aarch64 += aarch64/get-reg-list
  TEST_GEN_PROGS_aarch64 += aarch64/hypercalls
  TEST_GEN_PROGS_aarch64 += aarch64/page_fault_test
  TEST_GEN_PROGS_aarch64 += aarch64/psci_test
@@@ -154,7 -151,7 +153,8 @@@ TEST_GEN_PROGS_aarch64 += access_tracki
  TEST_GEN_PROGS_aarch64 += demand_paging_test
  TEST_GEN_PROGS_aarch64 += dirty_log_test
  TEST_GEN_PROGS_aarch64 += dirty_log_perf_test
 +TEST_GEN_PROGS_aarch64 += guest_print_test
+ TEST_GEN_PROGS_aarch64 += get-reg-list
  TEST_GEN_PROGS_aarch64 += kvm_create_max_vcpus
  TEST_GEN_PROGS_aarch64 += kvm_page_table_test
  TEST_GEN_PROGS_aarch64 += memslot_modification_stress_test
@@@ -169,10 -166,8 +169,10 @@@ TEST_GEN_PROGS_s390x += s390x/reset
  TEST_GEN_PROGS_s390x += s390x/sync_regs_test
  TEST_GEN_PROGS_s390x += s390x/tprot
  TEST_GEN_PROGS_s390x += s390x/cmma_test
 +TEST_GEN_PROGS_s390x += s390x/debug_test
  TEST_GEN_PROGS_s390x += demand_paging_test
  TEST_GEN_PROGS_s390x += dirty_log_test
 +TEST_GEN_PROGS_s390x += guest_print_test
  TEST_GEN_PROGS_s390x += kvm_create_max_vcpus
  TEST_GEN_PROGS_s390x += kvm_page_table_test
  TEST_GEN_PROGS_s390x += rseq_test
@@@ -181,12 -176,14 +181,15 @@@ TEST_GEN_PROGS_s390x += kvm_binary_stat
  
  TEST_GEN_PROGS_riscv += demand_paging_test
  TEST_GEN_PROGS_riscv += dirty_log_test
 +TEST_GEN_PROGS_riscv += guest_print_test
+ TEST_GEN_PROGS_riscv += get-reg-list
  TEST_GEN_PROGS_riscv += kvm_create_max_vcpus
  TEST_GEN_PROGS_riscv += kvm_page_table_test
  TEST_GEN_PROGS_riscv += set_memory_region_test
  TEST_GEN_PROGS_riscv += kvm_binary_stats_test
  
+ SPLIT_TESTS += get-reg-list
  TEST_PROGS += $(TEST_PROGS_$(ARCH_DIR))
  TEST_GEN_PROGS += $(TEST_GEN_PROGS_$(ARCH_DIR))
  TEST_GEN_PROGS_EXTENDED += $(TEST_GEN_PROGS_EXTENDED_$(ARCH_DIR))
@@@ -210,7 -207,6 +213,7 @@@ endi
  CFLAGS += -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 \
        -Wno-gnu-variable-sized-type-not-at-end -MD\
        -fno-builtin-memcmp -fno-builtin-memcpy -fno-builtin-memset \
 +      -fno-builtin-strnlen \
        -fno-stack-protector -fno-PIE -I$(LINUX_TOOL_INCLUDE) \
        -I$(LINUX_TOOL_ARCH_INCLUDE) -I$(LINUX_HDR_PATH) -Iinclude \
        -I$(<D) -Iinclude/$(ARCH_DIR) -I ../rseq -I.. $(EXTRA_CFLAGS) \
@@@ -235,11 -231,14 +238,14 @@@ LIBKVM_C_OBJ := $(patsubst %.c, $(OUTPU
  LIBKVM_S_OBJ := $(patsubst %.S, $(OUTPUT)/%.o, $(LIBKVM_S))
  LIBKVM_STRING_OBJ := $(patsubst %.c, $(OUTPUT)/%.o, $(LIBKVM_STRING))
  LIBKVM_OBJS = $(LIBKVM_C_OBJ) $(LIBKVM_S_OBJ) $(LIBKVM_STRING_OBJ)
+ SPLIT_TESTS_TARGETS := $(patsubst %, $(OUTPUT)/%, $(SPLIT_TESTS))
+ SPLIT_TESTS_OBJS := $(patsubst %, $(ARCH_DIR)/%.o, $(SPLIT_TESTS))
  
  TEST_GEN_OBJ = $(patsubst %, %.o, $(TEST_GEN_PROGS))
  TEST_GEN_OBJ += $(patsubst %, %.o, $(TEST_GEN_PROGS_EXTENDED))
  TEST_DEP_FILES = $(patsubst %.o, %.d, $(TEST_GEN_OBJ))
  TEST_DEP_FILES += $(patsubst %.o, %.d, $(LIBKVM_OBJS))
+ TEST_DEP_FILES += $(patsubst %.o, %.d, $(SPLIT_TESTS_OBJS))
  -include $(TEST_DEP_FILES)
  
  $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED): %: %.o
  $(TEST_GEN_OBJ): $(OUTPUT)/%.o: %.c
        $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@
  
- EXTRA_CLEAN += $(LIBKVM_OBJS) $(TEST_DEP_FILES) $(TEST_GEN_OBJ) cscope.*
+ $(SPLIT_TESTS_TARGETS): %: %.o $(SPLIT_TESTS_OBJS)
+       $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(LDLIBS) -o $@
+ EXTRA_CLEAN += $(LIBKVM_OBJS) $(TEST_DEP_FILES) $(TEST_GEN_OBJ) $(SPLIT_TESTS_OBJS) cscope.*
  
  x := $(shell mkdir -p $(sort $(dir $(LIBKVM_C_OBJ) $(LIBKVM_S_OBJ))))
  $(LIBKVM_C_OBJ): $(OUTPUT)/%.o: %.c
@@@ -53,13 -53,14 +53,13 @@@ void test_assert(bool exp, const char *
  #define TEST_ASSERT(e, fmt, ...) \
        test_assert((e), #e, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
  
 -#define ASSERT_EQ(a, b) do { \
 -      typeof(a) __a = (a); \
 -      typeof(b) __b = (b); \
 -      TEST_ASSERT(__a == __b, \
 -                  "ASSERT_EQ(%s, %s) failed.\n" \
 -                  "\t%s is %#lx\n" \
 -                  "\t%s is %#lx", \
 -                  #a, #b, #a, (unsigned long) __a, #b, (unsigned long) __b); \
 +#define TEST_ASSERT_EQ(a, b)                                          \
 +do {                                                                  \
 +      typeof(a) __a = (a);                                            \
 +      typeof(b) __b = (b);                                            \
 +      test_assert(__a == __b, #a " == " #b, __FILE__, __LINE__,       \
 +                  "%#lx != %#lx (%s != %s)",                          \
 +                  (unsigned long)(__a), (unsigned long)(__b), #a, #b);\
  } while (0)
  
  #define TEST_ASSERT_KVM_EXIT_REASON(vcpu, expected) do {              \
@@@ -185,7 -186,6 +185,9 @@@ static inline uint32_t atoi_non_negativ
        return num;
  }
  
 +int guest_vsnprintf(char *buf, int n, const char *fmt, va_list args);
 +int guest_snprintf(char *buf, int n, const char *fmt, ...);
 +
+ char *strdup_printf(const char *fmt, ...) __attribute__((format(printf, 1, 2), nonnull(1)));
  #endif /* SELFTEST_KVM_TEST_UTIL_H */