From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony Liguori Subject: Re: [Xen-changelog] Create /dev/xen/evtchn if it doesn't exist. Date: Wed, 07 Sep 2005 16:06:46 -0500 Message-ID: <431F5666.7070209@us.ibm.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com Cc: Steven Hand List-Id: xen-devel@lists.xenproject.org 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@ubuntu.eng.hq.xensource.com ># Node ID b7c7cb88f0ba9c0473d926c3cf531f9e086c3d09 ># Parent 7d0fb56b4a916cccc497d200e6a8329537ce740d >Create /dev/xen/evtchn if it doesn't exist. > >Signed-off-by: Steven Hand > >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@lists.xensource.com >http://lists.xensource.com/xen-changelog > > >