From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1D0XKC-0002S2-Ml for qemu-devel@nongnu.org; Sun, 13 Feb 2005 22:55:04 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1D0XK8-0002QL-Qz for qemu-devel@nongnu.org; Sun, 13 Feb 2005 22:55:02 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1D0XK7-0002MT-Hf for qemu-devel@nongnu.org; Sun, 13 Feb 2005 22:54:59 -0500 Received: from [64.59.128.220] (helo=bpd2mo1no.prod.shawcable.com) by monty-python.gnu.org with esmtp (Exim 4.34) id 1D0WfL-0002hN-Jb for qemu-devel@nongnu.org; Sun, 13 Feb 2005 22:12:51 -0500 Received: from bpd2mi1no.prod.shawcable.com (bpd2mi1no-qfe3.prod.shawcable.com [10.0.184.120]) by bpd2mo1no.prod.shawcable.com (Sun ONE Messaging Server 6.0 HotFix 1.01 (built Mar 15 2004)) with ESMTP id <0IBV00DXTSXCNS00@bpd2mo1no.prod.shawcable.com> for qemu-devel@nongnu.org; Sun, 13 Feb 2005 20:12:48 -0700 (MST) Received: from [192.168.145.99] (S0106000f66a57c25.cg.shawcable.net [68.145.130.4]) by bpd2mi1no.prod.shawcable.com (Sun ONE Messaging Server 6.0 HotFix 1.01 (built Mar 15 2004)) with ESMTP id <0IBV00K7ISXCXZ00@bpd2mi1no.prod.shawcable.com> for qemu-devel@nongnu.org; Sun, 13 Feb 2005 20:12:48 -0700 (MST) Date: Sun, 13 Feb 2005 20:16:25 -0700 From: Matthew Mastracci In-reply-to: Message-id: <42101809.9010508@aclaro.com> MIME-version: 1.0 Content-type: multipart/mixed; boundary=------------070407020103020602060809 References: Subject: [Qemu-devel] Re: sysfs patch for kqemu - take 2 Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------070407020103020602060809 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit This new patch is the same as the previous patch, but adds a module parameter "major" to specify the major number (0 for automatic allocation which is the default). For instance, to use dynamic major number allocation: insmod kqemu.ko To use the major number 12: insmod kqemu.ko major=12 I hereby place this patch in the public domain, suitable for inclusion in any GPL'd or non-GPL'd project. Matt. Matthew Mastracci wrote: > Here's a patch for supporting sysfs and udev. There's no conditional > logic - it needs the sysfs stuff to be present in the kernel headers. It > dynamically allocates a major number and stuffs it into a global > variable and uses that to register a device with sysfs. udev will then > pick up the new device and automatically create a new "kqemu" device node. > > Matt. --------------070407020103020602060809 Content-Type: text/plain; name="patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch" --- kqemu/kqemu.h 2005-02-12 07:37:04.000000000 -0700 +++ qemu/kqemu/kqemu.h 2005-02-13 19:06:12.000000000 -0700 @@ -1,8 +1,6 @@ #ifndef KQEMU_H #define KQEMU_H -#define KQEMU_MAJOR 250 - #define KQEMU_VERSION 0x010000 struct kqemu_segment_cache { --- kqemu/kmod.c 2005-02-10 15:09:09.000000000 -0700 +++ qemu/kqemu/kmod.c 2005-02-13 20:03:52.000000000 -0700 @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -34,6 +35,13 @@ int page_alloc_count; #endif +struct class_simple *kqemu_class; +static int major = 0; +int kqemu_major; + +MODULE_PARM(major, "i"); +MODULE_PARM_DESC(major, "Major device number (1-255 or 0 for autodetect)"); + /* lock the page at virtual address 'user_addr' and return its page index. Return -1 if error */ unsigned long CDECL kqemu_lock_user_page(unsigned long user_addr) @@ -295,18 +303,33 @@ if (max_locked_pages > 32768) max_locked_pages = 32768; - ret = register_chrdev(KQEMU_MAJOR, "kqemu", &kqemu_fops); + ret = register_chrdev(major, "kqemu", &kqemu_fops); if (ret < 0) { - printk("kqemu: could not get major %d\n", KQEMU_MAJOR); + if (major == 0) + printk("kqemu: could not get dynamic major\n"); + else + printk("kqemu: could not get requested major %d\n", major); + return ret; } - printk("KQEMU installed, max_instances=%d max_locked_mem=%dkB.\n", + + if (major == 0) + kqemu_major = ret; + else + kqemu_major = major; + + kqemu_class = class_simple_create(THIS_MODULE, "kqemu"); + class_simple_device_add(kqemu_class, MKDEV(kqemu_major,0), NULL, "kqemu"); + printk("KQEMU installed, max_instances=%d max_locked_mem=%dkB major=%d.\n", KQEMU_MAX_INSTANCES, - max_locked_pages * 4); + max_locked_pages * 4, + kqemu_major); return 0; } void cleanup_module(void) { - unregister_chrdev(KQEMU_MAJOR, "kqemu"); + class_simple_device_remove(MKDEV(kqemu_major,0)); + class_simple_destroy(kqemu_class); + unregister_chrdev(kqemu_major, "kqemu"); } --------------070407020103020602060809--