WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] Re: [Xen-changelog] Create /dev/xen/evtchn if it doesn't exi

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] Re: [Xen-changelog] Create /dev/xen/evtchn if it doesn't exist.
From: Anthony Liguori <aliguori@xxxxxxxxxx>
Date: Wed, 07 Sep 2005 16:06:46 -0500
Cc: Steven Hand <steven@xxxxxxxxxxxxx>
Delivery-date: Wed, 07 Sep 2005 21:04:48 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <E1ED6aa-0006WS-5H@xxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <E1ED6aa-0006WS-5H@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mozilla Thunderbird 1.0.6 (X11/20050727)
Another way to solve this problem is to just use "/dev/evtchn" as that is what will be created by udev.

In fact, what does everyone think about just deprecating /dev/xen/evtchn and just using /dev/evtchn everywhere? I'll submit a patch if it's acceptable (including removing the places where we create /dev/xen/evtchn).

Regards,

Anthony Liguori

Xen patchbot -unstable wrote:

# HG changeset patch
# User shand@xxxxxxxxxxxxxxxxxxxxxxxxxxx
# Node ID b7c7cb88f0ba9c0473d926c3cf531f9e086c3d09
# Parent  7d0fb56b4a916cccc497d200e6a8329537ce740d
Create /dev/xen/evtchn if it doesn't exist.
Signed-off-by: Steven Hand <steven@xxxxxxxxxxxxx>

diff -r 7d0fb56b4a91 -r b7c7cb88f0ba tools/xenstore/xenstored_domain.c
--- a/tools/xenstore/xenstored_domain.c Wed Sep  7 19:01:31 2005
+++ b/tools/xenstore/xenstored_domain.c Wed Sep  7 20:30:00 2005
@@ -433,33 +433,57 @@
{
}

+#define EVTCHN_DEV_NAME  "/dev/xen/evtchn"
+#define EVTCHN_DEV_MAJOR 10
+#define EVTCHN_DEV_MINOR 201
+
/* Returns the event channel handle. */
int domain_init(void)
{
-       /* The size of the ringbuffer: half a page minus head structure. */
-       ringbuf_datasize = getpagesize() / 2 - sizeof(struct ringbuf_head);
-
-       xc_handle = talloc(talloc_autofree_context(), int);
-       if (!xc_handle)
-               barf_perror("Failed to allocate domain handle");
-       *xc_handle = xc_interface_open();
-       if (*xc_handle < 0)
-               barf_perror("Failed to open connection to hypervisor");
-       talloc_set_destructor(xc_handle, close_xc_handle);
-
+    /* The size of the ringbuffer: half a page minus head structure. */
+    ringbuf_datasize = getpagesize() / 2 - sizeof(struct ringbuf_head);
+ + xc_handle = talloc(talloc_autofree_context(), int);
+    if (!xc_handle)
+        barf_perror("Failed to allocate domain handle");
+
+    *xc_handle = xc_interface_open();
+    if (*xc_handle < 0)
+        barf_perror("Failed to open connection to hypervisor (privcmd)");
+
+    talloc_set_destructor(xc_handle, close_xc_handle);
+ #ifdef TESTING
-       eventchn_fd = fake_open_eventchn();
+    eventchn_fd = fake_open_eventchn();
#else
-       eventchn_fd = open("/dev/xen/evtchn", O_RDWR);
+    {
+        struct stat st;
+ + /* Make sure any existing device file links to correct device. */
+        if ( (lstat(EVTCHN_DEV_NAME, &st) != 0) || !S_ISCHR(st.st_mode) ||
+             (st.st_rdev != makedev(EVTCHN_DEV_MAJOR, EVTCHN_DEV_MINOR)) )
+            (void)unlink(EVTCHN_DEV_NAME);
+ + reopen:
+        eventchn_fd = open(EVTCHN_DEV_NAME, O_NONBLOCK|O_RDWR);
+        if (eventchn_fd == -1) {
+            if ((errno == ENOENT) && (
+ (mkdir("/dev/xen", 0755) == 0) || (errno == EEXIST)) + && (mknod(EVTCHN_DEV_NAME, S_IFCHR|0600,
+                          makedev(EVTCHN_DEV_MAJOR,EVTCHN_DEV_MINOR)) == 0))
+                goto reopen;
+            return -errno;
+        }
+    }
#endif
-       if (eventchn_fd < 0)
-               barf_perror("Failed to open connection to hypervisor");
-
-       if (xc_evtchn_bind_virq(*xc_handle, VIRQ_DOM_EXC, &virq_port))
-               barf_perror("Failed to bind to domain exception virq");
-
-       if (ioctl(eventchn_fd, EVENTCHN_BIND, virq_port) != 0)
-               barf_perror("Failed to bind to domain exception virq port");
-
-       return eventchn_fd;
-}
+    if (eventchn_fd < 0)
+        barf_perror("Failed to open connection to hypervisor (evtchn)");
+ + if (xc_evtchn_bind_virq(*xc_handle, VIRQ_DOM_EXC, &virq_port))
+        barf_perror("Failed to bind to domain exception virq");
+ + if (ioctl(eventchn_fd, EVENTCHN_BIND, virq_port) != 0)
+        barf_perror("Failed to bind to domain exception virq port");
+ + return eventchn_fd;
+}

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>