From 20439c0fe5c946346cfeea6a1cefe43e483711ec Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Wed, 25 Dec 2013 23:37:44 +0100 Subject: [PATCH] allow to compile a separate kernel module with a named extension running: make EXT=2 will create a: kdbus2.ko and the tests will run against: /dev/kdbus2/control This allows us to run a new and separated kernel modules while the original kdbus.ko is in use in the booted system. --- Makefile | 17 ++++++++--------- memfd.c | 2 +- namespace.c | 8 ++++---- pool.c | 2 +- test/Makefile | 2 +- test/test-kdbus-activator.c | 6 +++--- test/test-kdbus-benchmark.c | 6 +++--- test/test-kdbus-chat.c | 6 +++--- test/test-kdbus-daemon.c | 6 +++--- test/test-kdbus-fuzz.c | 6 +++--- test/test-kdbus.c | 17 ++++++++--------- 11 files changed, 38 insertions(+), 40 deletions(-) diff --git a/Makefile b/Makefile index 81d0046..cc384f1 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -kdbus-y := \ +kdbus$(EXT)-y := \ bus.o \ connection.o \ endpoint.o \ @@ -14,8 +14,7 @@ kdbus-y := \ policy.o \ pool.o -# obj-$(CONFIG_KDBUS) += kdbus.o -obj-m += kdbus.o +obj-m += kdbus$(EXT).o KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) @@ -23,7 +22,7 @@ PWD := $(shell pwd) all: module test test:: - $(MAKE) -C test + $(MAKE) -C test KBUILD_MODNAME=kdbus$(EXT) module: $(MAKE) -C $(KERNELDIR) M=$(PWD) @@ -38,20 +37,20 @@ check: test/test-kdbus install: module - mkdir -p /lib/modules/$(shell uname -r)/kernel/drivers/kdbus/ - cp -f kdbus.ko /lib/modules/$(shell uname -r)/kernel/drivers/kdbus/ + mkdir -p /lib/modules/$(shell uname -r)/kernel/drivers/kdbus$(EXT)/ + cp -f kdbus$(EXT).ko /lib/modules/$(shell uname -r)/kernel/drivers/kdbus$(EXT)/ depmod $(shell name -r) uninstall: - rm -f /lib/modules/$(shell uname -r)/kernel/drivers/kdbus/kdbus.ko + rm -f /lib/modules/$(shell uname -r)/kernel/drivers/kdbus/kdbus$(EXT).ko coccicheck: $(MAKE) -C $(KERNELDIR) M=$(PWD) coccicheck tt: all sudo sh -c 'dmesg -c > /dev/null' - -sudo sh -c 'rmmod kdbus' - sudo sh -c 'insmod kdbus.ko' + -sudo sh -c 'rmmod kdbus$(EXT)' + sudo sh -c 'insmod kdbus$(EXT).ko' -sudo sh -c 'sync; umount / 2> /dev/null' test/test-kdbus dmesg diff --git a/memfd.c b/memfd.c index c4e2025..205c891 100644 --- a/memfd.c +++ b/memfd.c @@ -108,7 +108,7 @@ int kdbus_memfd_new(int *fd) mutex_init(&mf->lock); /* allocate a new unlinked shmem file */ - shmemfp = shmem_file_setup("kdbus-memfd", 0, 0); + shmemfp = shmem_file_setup(KBUILD_MODNAME "-memfd", 0, 0); if (IS_ERR(shmemfp)) { ret = PTR_ERR(shmemfp); goto exit; diff --git a/namespace.c b/namespace.c index d955324..75cf5c0 100644 --- a/namespace.c +++ b/namespace.c @@ -39,7 +39,7 @@ static DEFINE_MUTEX(kdbus_subsys_lock); /* kdbus sysfs subsystem */ struct bus_type kdbus_subsys = { - .name = "kdbus", + .name = KBUILD_MODNAME, }; /* control nodes are world accessible */ @@ -111,7 +111,7 @@ void kdbus_ns_disconnect(struct kdbus_ns *ns) } if (ns->major > 0) { idr_remove(&kdbus_ns_major_idr, ns->major); - unregister_chrdev(ns->major, "kdbus"); + unregister_chrdev(ns->major, KBUILD_MODNAME); ns->major = 0; } } @@ -219,7 +219,7 @@ int kdbus_ns_new(struct kdbus_ns *parent, const char *name, umode_t mode, struct /* compose name and path of base directory in /dev */ if (!parent) { /* initial namespace */ - n->devpath = kstrdup("kdbus", GFP_KERNEL); + n->devpath = kstrdup(KBUILD_MODNAME, GFP_KERNEL); if (!n->devpath) { ret = -ENOMEM; goto exit_unlock; @@ -248,7 +248,7 @@ int kdbus_ns_new(struct kdbus_ns *parent, const char *name, umode_t mode, struct } /* get dynamic major */ - ret = register_chrdev(0, "kdbus", &kdbus_device_ops); + ret = register_chrdev(0, KBUILD_MODNAME, &kdbus_device_ops); if (ret < 0) goto exit_unlock; diff --git a/pool.c b/pool.c index 6750831..111c285 100644 --- a/pool.c +++ b/pool.c @@ -300,7 +300,7 @@ int kdbus_pool_new(struct kdbus_pool **pool, size_t size) if (!p) return -ENOMEM; - f = shmem_file_setup("kdbus-pool", size, 0); + f = shmem_file_setup(KBUILD_MODNAME "-pool", size, 0); if (IS_ERR(f)) { ret = PTR_ERR(f); goto exit_free_p; diff --git a/test/Makefile b/test/Makefile index 36ca150..b4117bf 100644 --- a/test/Makefile +++ b/test/Makefile @@ -15,7 +15,7 @@ all: $(TESTS) %.o: %.c ../kdbus.h @echo ' TARGET_CC $@' - @$(CC) $(CFLAGS) -c $< -o $@ + @$(CC) $(CFLAGS) -DKBUILD_MODNAME=\"$(KBUILD_MODNAME)\" -c $< -o $@ test-%: $(TEST_COMMON) test-%.o @echo ' TARGET_LD $@' diff --git a/test/test-kdbus-activator.c b/test/test-kdbus-activator.c index 6d4ac61..b6ad4b5 100644 --- a/test/test-kdbus-activator.c +++ b/test/test-kdbus-activator.c @@ -89,8 +89,8 @@ int main(int argc, char *argv[]) struct pollfd fds[2]; bool activator_done = false; - printf("-- opening /dev/kdbus/control\n"); - fdc = open("/dev/kdbus/control", O_RDWR|O_CLOEXEC); + printf("-- opening /dev/" KBUILD_MODNAME "/control\n"); + fdc = open("/dev/" KBUILD_MODNAME "/control", O_RDWR|O_CLOEXEC); if (fdc < 0) { fprintf(stderr, "--- error %d (%m)\n", fdc); return EXIT_FAILURE; @@ -116,7 +116,7 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } - if (asprintf(&bus, "/dev/kdbus/%s/bus", bus_make.name) < 0) + if (asprintf(&bus, "/dev/" KBUILD_MODNAME "/%s/bus", bus_make.name) < 0) return EXIT_FAILURE; activator = make_activator(bus, "foo.test.activator"); diff --git a/test/test-kdbus-benchmark.c b/test/test-kdbus-benchmark.c index daa11dd..88a5b6a 100644 --- a/test/test-kdbus-benchmark.c +++ b/test/test-kdbus-benchmark.c @@ -230,8 +230,8 @@ int main(int argc, char *argv[]) for (i = 0; i < sizeof(stress_payload); i++) stress_payload[i] = i; - printf("-- opening /dev/kdbus/control\n"); - fdc = open("/dev/kdbus/control", O_RDWR|O_CLOEXEC); + printf("-- opening /dev/" KBUILD_MODNAME "/control\n"); + fdc = open("/dev/" KBUILD_MODNAME "/control", O_RDWR|O_CLOEXEC); if (fdc < 0) { fprintf(stderr, "--- error %d (%m)\n", fdc); return EXIT_FAILURE; @@ -257,7 +257,7 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } - if (asprintf(&bus, "/dev/kdbus/%s/bus", bus_make.name) < 0) + if (asprintf(&bus, "/dev/" KBUILD_MODNAME "/%s/bus", bus_make.name) < 0) return EXIT_FAILURE; conn_a = connect_to_bus(bus, 0); diff --git a/test/test-kdbus-chat.c b/test/test-kdbus-chat.c index 34a71e8..d9e6b12 100644 --- a/test/test-kdbus-chat.c +++ b/test/test-kdbus-chat.c @@ -38,8 +38,8 @@ int main(int argc, char *argv[]) int count; int r; - printf("-- opening /dev/kdbus/control\n"); - fdc = open("/dev/kdbus/control", O_RDWR|O_CLOEXEC); + printf("-- opening /dev/" KBUILD_MODNAME "/control\n"); + fdc = open("/dev/" KBUILD_MODNAME "/control", O_RDWR|O_CLOEXEC); if (fdc < 0) { fprintf(stderr, "--- error %d (%m)\n", fdc); return EXIT_FAILURE; @@ -65,7 +65,7 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } - if (asprintf(&bus, "/dev/kdbus/%s/bus", bus_make.name) < 0) + if (asprintf(&bus, "/dev/" KBUILD_MODNAME "/%s/bus", bus_make.name) < 0) return EXIT_FAILURE; conn_a = connect_to_bus(bus, 0); diff --git a/test/test-kdbus-daemon.c b/test/test-kdbus-daemon.c index f010ab0..fa29dde 100644 --- a/test/test-kdbus-daemon.c +++ b/test/test-kdbus-daemon.c @@ -40,9 +40,9 @@ int main(int argc, char *argv[]) printf("Starting Test Bus Daemon (press ENTER to exit)\n"); - fd_owner = open("/dev/kdbus/control", O_RDWR|O_CLOEXEC); + fd_owner = open("/dev/" KBUILD_MODNAME "/control", O_RDWR|O_CLOEXEC); if (fd_owner < 0) { - fprintf(stderr, "/dev/kdbus/control: %m\n"); + fprintf(stderr, "/dev/" KBUILD_MODNAME "/control: %m\n"); return EXIT_FAILURE; } @@ -66,7 +66,7 @@ int main(int argc, char *argv[]) } printf(" Created bus '%s'\n", bus_make.name); - if (asprintf(&bus, "/dev/kdbus/%s/bus", bus_make.name) < 0) + if (asprintf(&bus, "/dev/" KBUILD_MODNAME "/%s/bus", bus_make.name) < 0) return EXIT_FAILURE; conn = connect_to_bus(bus, 0); diff --git a/test/test-kdbus-fuzz.c b/test/test-kdbus-fuzz.c index 3536a2d..811ab55 100644 --- a/test/test-kdbus-fuzz.c +++ b/test/test-kdbus-fuzz.c @@ -99,8 +99,8 @@ static int make_bus(void) unsigned int i; int ret, fdc; - printf("-- opening /dev/kdbus/control\n"); - fdc = open("/dev/kdbus/control", O_RDWR|O_CLOEXEC); + printf("-- opening /dev/" KBUILD_MODNAME "/control\n"); + fdc = open("/dev/" KBUILD_MODNAME "/control", O_RDWR|O_CLOEXEC); if (fdc < 0) { fprintf(stderr, "--- error %d (%m)\n", fdc); return EXIT_FAILURE; @@ -129,7 +129,7 @@ static int make_bus(void) return EXIT_FAILURE; } - if (asprintf(&bus, "/dev/kdbus/%s/bus", bus_make.name) < 0) + if (asprintf(&bus, "/dev/" KBUILD_MODNAME "/%s/bus", bus_make.name) < 0) return EXIT_FAILURE; for (ret = 0; ret < random() % 20; ret++) { diff --git a/test/test-kdbus.c b/test/test-kdbus.c index 7c00df0..858570f 100644 --- a/test/test-kdbus.c +++ b/test/test-kdbus.c @@ -253,7 +253,6 @@ static int send_message(const struct kdbus_conn *conn, } /* -----------------------------------8<------------------------------- */ - static int check_nsmake(struct kdbus_check_env *env) { int fd, fd2; @@ -267,7 +266,7 @@ static int check_nsmake(struct kdbus_check_env *env) } ns_make; int ret; - fd = open("/dev/kdbus/control", O_RDWR|O_CLOEXEC); + fd = open("/dev/" KBUILD_MODNAME "/control", O_RDWR|O_CLOEXEC); ASSERT_RETURN(fd >= 0); memset(&ns_make, 0, sizeof(ns_make)); @@ -283,20 +282,20 @@ static int check_nsmake(struct kdbus_check_env *env) return CHECK_SKIP; ASSERT_RETURN(ret == 0); - ASSERT_RETURN(access("/dev/kdbus/ns/blah/control", F_OK) == 0); + ASSERT_RETURN(access("/dev/" KBUILD_MODNAME "/ns/blah/control", F_OK) == 0); /* can't use the same fd for ns make twice */ ret = ioctl(fd, KDBUS_CMD_NS_MAKE, &ns_make); ASSERT_RETURN(ret == -1 && errno == EBADFD); /* can't register the same name twice */ - fd2 = open("/dev/kdbus/control", O_RDWR|O_CLOEXEC); + fd2 = open("/dev/" KBUILD_MODNAME "/control", O_RDWR|O_CLOEXEC); ret = ioctl(fd2, KDBUS_CMD_NS_MAKE, &ns_make); ASSERT_RETURN(ret == -1 && errno == EEXIST); close(fd2); close(fd); - ASSERT_RETURN(access("/dev/kdbus/ns/blah/control", F_OK) < 0); + ASSERT_RETURN(access("/dev/" KBUILD_MODNAME "/ns/blah/control", F_OK) < 0); return CHECK_OK; } @@ -323,7 +322,7 @@ static int check_busmake(struct kdbus_check_env *env) char s[PATH_MAX]; int ret; - env->control_fd = open("/dev/kdbus/control", O_RDWR|O_CLOEXEC); + env->control_fd = open("/dev/" KBUILD_MODNAME "/control", O_RDWR|O_CLOEXEC); ASSERT_RETURN(env->control_fd >= 0); memset(&bus_make, 0, sizeof(bus_make)); @@ -351,7 +350,7 @@ static int check_busmake(struct kdbus_check_env *env) bus_make.n_size; ret = ioctl(env->control_fd, KDBUS_CMD_BUS_MAKE, &bus_make); ASSERT_RETURN(ret == 0); - snprintf(s, sizeof(s), "/dev/kdbus/%u-blah/bus", getuid()); + snprintf(s, sizeof(s), "/dev/" KBUILD_MODNAME "/%u-blah/bus", getuid()); ASSERT_RETURN(access(s, F_OK) == 0); #if 0 @@ -1052,7 +1051,7 @@ static int check_prepare_env(const struct kdbus_check *c, struct kdbus_check_env char n[32]; int ret; - env->control_fd = open("/dev/kdbus/control", O_RDWR|O_CLOEXEC); + env->control_fd = open("/dev/" KBUILD_MODNAME "/control", O_RDWR|O_CLOEXEC); ASSERT_RETURN(env->control_fd >= 0); memset(&bus_make, 0, sizeof(bus_make)); @@ -1075,7 +1074,7 @@ static int check_prepare_env(const struct kdbus_check *c, struct kdbus_check_env ret = ioctl(env->control_fd, KDBUS_CMD_BUS_MAKE, &bus_make); ASSERT_RETURN(ret == 0); - ret = asprintf(&env->buspath, "/dev/kdbus/%s/bus", bus_make.name); + ret = asprintf(&env->buspath, "/dev/" KBUILD_MODNAME "/%s/bus", bus_make.name); ASSERT_RETURN(ret >= 0); } -- 2.34.1