From bb3a923170696b88b1a68c6886f285739f109190 Mon Sep 17 00:00:00 2001 From: tujipei Date: Wed, 29 May 2024 14:42:43 +0800 Subject: [PATCH] Merge src-openEuler/virtCCA_driver different Signed-off-by: tujipei --- Makefile | 6 ++-- tmm_driver/src/Makefile | 6 ++-- tmm_driver/src/tmm_driver.c | 65 +++++++++++++++++++++++++++++++++---- 3 files changed, 66 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 5fb3ae8..10afe19 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,15 @@ .PHONY: clean tmm seal +KERNEL_DIR ?= /usr/src/kernels/$(shell uname -r) + all: tmm seal tmm: - make -C tmm_driver/src + make KERNEL_DIR=$(KERNEL_DIR) -C tmm_driver/src seal: make -C sealing_key/src clean: make clean -C tmm_driver/src - make clean -C sealing_key/src \ No newline at end of file + make clean -C sealing_key/src diff --git a/tmm_driver/src/Makefile b/tmm_driver/src/Makefile index 03da482..9936b7f 100644 --- a/tmm_driver/src/Makefile +++ b/tmm_driver/src/Makefile @@ -1,12 +1,12 @@ obj-m += tmm_driver.o # Otherwise we were called directly from the command # line; invoke the kernel build system. -KERNEL_DIR=/usr/src/kernels/$(shell uname -r) -PWD:=$(shell pwd) +KERNEL_DIR ?= /usr/src/kernels/$(shell uname -r) +PWD := $(shell pwd) modules: $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules modules_install: $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules_install clean: - $(MAKE) -C $(KERNEL_DIR) M=$(PWD) clean \ No newline at end of file + $(MAKE) -C $(KERNEL_DIR) M=$(PWD) clean diff --git a/tmm_driver/src/tmm_driver.c b/tmm_driver/src/tmm_driver.c index dda497d..a71656d 100644 --- a/tmm_driver/src/tmm_driver.c +++ b/tmm_driver/src/tmm_driver.c @@ -9,8 +9,9 @@ #include #include +#include +#include #include -#include MODULE_LICENSE("GPL"); MODULE_AUTHOR("HUAWEI TECHNOLOGIES CO., LTD."); @@ -57,9 +58,49 @@ static const char *meta_data_strs[] = { "ttt" }; +typedef unsigned long (*kallsyms_lookup_name_t)(const char *name); +static kallsyms_lookup_name_t fn_kallsyms_lookup_name = NULL; + +typedef uint64_t (*tmi_mem_info_show_t)(uint64_t addr); +static tmi_mem_info_show_t tmi_mem_info_show_func = NULL; + +static struct kprobe kp_sym_lookup = { + .symbol_name = "kallsyms_lookup_name", +}; + +static void get_kallsyms_lookup_name(void) +{ + int ret; + + ret = register_kprobe(&kp_sym_lookup); + if (ret < 0) { + pr_err("tmm_driver: register_kprobe failed, returned %d\n", ret); + } + + fn_kallsyms_lookup_name = (void *)kp_sym_lookup.addr; + unregister_kprobe(&kp_sym_lookup); +} + +static int get_symbol_from_kernel(void) +{ + get_kallsyms_lookup_name(); + if (!fn_kallsyms_lookup_name) { + pr_err("tmm_driver: cannot get function kallsyms_lookup_name\n"); + return -1; + } + + tmi_mem_info_show_func = (tmi_mem_info_show_t)fn_kallsyms_lookup_name("tmi_mem_info_show"); + if (!tmi_mem_info_show_func) { + pr_err("tmm_driver: cannot get function tmi_mem_info_show\n"); + return -1; + } + + return 0; +} + static int get_tmm_memory_info(tmm_memory_info_s *memory_info) { - return tmi_mem_info_show((uint64_t)(memory_info)); + return tmi_mem_info_show_func((uint64_t)memory_info); } static uint64_t cal_numa_node_mem_info(tmm_memory_info_s *memory_info, @@ -343,22 +384,34 @@ static int __init tmm_driver_init(void) rc = sysfs_create_file(tmm_kobj, &memory_info_attr.attr); if (rc) { pr_err("tmm_driver: unable to create memory_info sysfs file (%d)\n", rc); - return rc; + goto err; } rc = sysfs_create_file(tmm_kobj, &slab_info_attr.attr); if (rc) { pr_err("tmm_driver: unable to create slab_info sysfs file (%d)\n", rc); - return rc; + goto err; } rc = sysfs_create_file(tmm_kobj, &buddy_info_attr.attr); if (rc) { pr_err("tmm_driver: unable to create buddy_info sysfs file (%d)\n", rc); - return rc; + goto err; } + rc = get_symbol_from_kernel(); + if (rc) + goto err; + return 0; + +err: + sysfs_remove_file(tmm_kobj, &memory_info_attr.attr); + sysfs_remove_file(tmm_kobj, &slab_info_attr.attr); + sysfs_remove_file(tmm_kobj, &buddy_info_attr.attr); + kobject_put(tmm_kobj); + + return rc; } static void __exit tmm_driver_exit(void) @@ -371,4 +424,4 @@ static void __exit tmm_driver_exit(void) } module_init(tmm_driver_init); -module_exit(tmm_driver_exit); \ No newline at end of file +module_exit(tmm_driver_exit); -- Gitee