From: Esben Nielsen <simlo at phys au dk> One of the problems was use of direct architecture specific semaphores (which doesn't work under PREEMPT_REALTIME) and in places where a quick (maybe too quick) look at the code told me that completions ought to be used. Therefore I changed two semaphores to completions which compiled fine. I have tried the change on 2.6.11-rc2, and it seemed to work, but I have not tested it heavily.
Signed-off-by: Jeff Dike <[EMAIL PROTECTED]> Index: linux-2.6.11/arch/um/drivers/port_kern.c =================================================================== --- linux-2.6.11.orig/arch/um/drivers/port_kern.c 2005-03-08 20:17:34.000000000 -0500 +++ linux-2.6.11/arch/um/drivers/port_kern.c 2005-03-08 22:16:48.000000000 -0500 @@ -25,7 +25,7 @@ struct list_head list; atomic_t wait_count; int has_connection; - struct semaphore sem; + struct completion done; int port; int fd; spinlock_t lock; @@ -68,7 +68,7 @@ conn->fd = fd; list_add(&conn->list, &conn->port->connections); - up(&conn->port->sem); + complete(&conn->port->done); return(IRQ_HANDLED); } @@ -197,13 +197,14 @@ { .list = LIST_HEAD_INIT(port->list), .wait_count = ATOMIC_INIT(0), .has_connection = 0, - .sem = __SEMAPHORE_INITIALIZER(port->sem, - 0), .lock = SPIN_LOCK_UNLOCKED, .port = port_num, .fd = fd, .pending = LIST_HEAD_INIT(port->pending), .connections = LIST_HEAD_INIT(port->connections) }); + + init_completion(&port->done), + list_add(&port->list, &ports); found: @@ -237,7 +238,7 @@ atomic_inc(&port->wait_count); while(1){ fd = -ERESTARTSYS; - if(down_interruptible(&port->sem)) + if(wait_for_completion_interruptible(&port->done)) goto out; spin_lock(&port->lock); @@ -308,14 +309,3 @@ } __uml_exitcall(free_port); - -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-file-style: "linux" - * End: - */ Index: linux-2.6.11/arch/um/drivers/xterm_kern.c =================================================================== --- linux-2.6.11.orig/arch/um/drivers/xterm_kern.c 2005-03-08 20:17:34.000000000 -0500 +++ linux-2.6.11/arch/um/drivers/xterm_kern.c 2005-03-08 22:16:48.000000000 -0500 @@ -16,7 +16,7 @@ #include "xterm.h" struct xterm_wait { - struct semaphore sem; + struct completion ready; int fd; int pid; int new_fd; @@ -32,7 +32,7 @@ return(IRQ_NONE); xterm->new_fd = fd; - up(&xterm->sem); + complete(&xterm->ready); return(IRQ_HANDLED); } @@ -49,10 +49,10 @@ /* This is a locked semaphore... */ *data = ((struct xterm_wait) - { .sem = __SEMAPHORE_INITIALIZER(data->sem, 0), - .fd = socket, + { .fd = socket, .pid = -1, .new_fd = -1 }); + init_completion(&data->ready); err = um_request_irq(XTERM_IRQ, socket, IRQ_READ, xterm_interrupt, SA_INTERRUPT | SA_SHIRQ | SA_SAMPLE_RANDOM, @@ -68,7 +68,7 @@ * * XXX Note, if the xterm doesn't work for some reason (eg. DISPLAY * isn't set) this will hang... */ - down(&data->sem); + wait_for_completion(&data->ready); free_irq_by_irq_and_dev(XTERM_IRQ, data); free_irq(XTERM_IRQ, data); ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ User-mode-linux-devel mailing list User-mode-linux-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel