2006-08-04 13:02:18

by alessandro salvatori

[permalink] [raw]
Subject: [uml-devel] [PATCH 10/19] UML - Remove spinlock wrapper functions

Jeff,

the new lock irq_lock is still static, but we now have
preprocessor macros to be included from a header file instead of
non-static functions in the same module as the static irq_lock.

Am I missing something?

cheers
Alessandro Salvatori


On 7/7/06, Jeff Dike <[email protected]> wrote:
> The irq_spinlock is not needed from user code any more, so the
> irq_lock and irq_unlock wrappers can go away. This also changes the
> name of the lock to irq_lock.
>
> Signed-off-by: Jeff Dike < [email protected]>
>
> Index: linux-2.6.17/arch/um/include/irq_user.h
> ===================================================================
> --- linux-2.6.17.orig/arch/um/include/irq_user.h 2006-07-06 13:27:58.000000000 -0400
> +++ linux-2.6.17/arch/um/include/irq_user.h 2006-07-06 13:28:14.000000000 -0400
> @@ -29,8 +29,6 @@ extern void reactivate_fd(int fd, int ir
> extern void deactivate_fd(int fd, int irqnum);
> extern int deactivate_all_fds(void);
> extern int activate_ipi(int fd, int pid);
> -extern unsigned long irq_lock(void);
> -extern void irq_unlock(unsigned long flags);
>
> #ifdef CONFIG_MODE_TT
> extern void forward_interrupts(int pid);
> Index: linux-2.6.17/arch/um/kernel/irq.c
> ===================================================================
> --- linux-2.6.17.orig/arch/um/kernel/irq.c 2006-07-06 13:27:58.000000000 -0400
> +++ linux-2.6.17 /arch/um/kernel/irq.c 2006-07-06 13:28:43.000000000 -0400
> @@ -123,6 +123,8 @@ static void maybe_sigio_broken(int fd, i
> }
> }
>
> +static DEFINE_SPINLOCK(irq_lock);
> +
> int activate_fd(int irq, int fd, int type, void *dev_id)
> {
> struct pollfd *tmp_pfd;
> @@ -166,7 +168,7 @@ int activate_fd(int irq, int fd, int typ
> * this is called only from process context, and can be locked with
> * a semaphore.
> */
> - flags = irq_lock();
> + spin_lock_irqsave(&irq_lock, flags);
> for (irq_fd = active_fds; irq_fd != NULL; irq_fd = irq_fd->next) {
> if ((irq_fd->fd == fd) && (irq_fd->type == type)) {
> printk("Registering fd %d twice\n", fd);
> @@ -199,7 +201,7 @@ int activate_fd(int irq, int fd, int typ
> * so we will not be able to put new pollfd struct to pollfds
> * then we free the buffer tmp_fds and try again.
> */
> - irq_unlock(flags);
> + spin_unlock_irqrestore(&irq_lock, flags);
> kfree(tmp_pfd);
> tmp_pfd = NULL;
>
> @@ -207,14 +209,14 @@ int activate_fd(int irq, int fd, int typ
> if (tmp_pfd == NULL)
> goto out_kfree;
>
> - flags = irq_lock();
> + spin_lock_irqsave(&irq_lock, flags);
> }
> /*-------------*/
>
> *last_irq_ptr = new_fd;
> last_irq_ptr = &new_fd->next;
>
> - irq_unlock(flags);
> + spin_unlock_irqrestore(&irq_lock, flags);
>
> /* This calls activate_fd, so it has to be outside the critical
> * section.
> @@ -224,7 +226,7 @@ int activate_fd(int irq, int fd, int typ
> return(0);
>
> out_unlock:
> - irq_unlock(flags);
> + spin_unlock_irqrestore(&irq_lock, flags);
> out_kfree:
> kfree(new_fd);
> out:
> @@ -235,9 +237,9 @@ static void free_irq_by_cb(int (*test)(s
> {
> unsigned long flags;
>
> - flags = irq_lock();
> + spin_lock_irqsave(&irq_lock, flags);
> os_free_irq_by_cb(test, arg, active_fds, &last_irq_ptr);
> - irq_unlock(flags);
> + spin_unlock_irqrestore(&irq_lock, flags);
> }
>
> struct irq_and_dev {
> @@ -304,14 +306,14 @@ void reactivate_fd(int fd, int irqnum)
> unsigned long flags;
> int i;
>
> - flags = irq_lock();
> + spin_lock_irqsave(&irq_lock, flags);
> irq = find_irq_by_fd(fd, irqnum, &i);
> if (irq == NULL) {
> - irq_unlock(flags);
> + spin_unlock_irqrestore(&irq_lock, flags);
> return;
> }
> os_set_pollfd(i, irq->fd);
> - irq_unlock(flags);
> + spin_unlock_irqrestore(&irq_lock, flags);
>
> /* This calls activate_fd, so it has to be outside the critical
> * section.
> @@ -325,13 +327,13 @@ void deactivate_fd(int fd, int irqnum)
> unsigned long flags;
> int i;
>
> - flags = irq_lock();
> + spin_lock_irqsave(&irq_lock, flags);
> irq = find_irq_by_fd(fd, irqnum, &i);
> if (irq == NULL)
> goto out;
> os_set_pollfd(i, -1);
> out:
> - irq_unlock(flags);
> + spin_unlock_irqrestore(&irq_lock, flags);
> }
>
> int deactivate_all_fds(void)
> @@ -357,7 +359,7 @@ void forward_interrupts(int pid)
> unsigned long flags;
> int err;
>
> - flags = irq_lock();
> + spin_lock_irqsave(&irq_lock, flags);
> for (irq = active_fds; irq != NULL; irq = irq->next) {
> err = os_set_owner(irq->fd, pid);
> if (err < 0) {
> @@ -370,7 +372,7 @@ void forward_interrupts(int pid)
>
> irq->pid = pid;
> }
> - irq_unlock(flags);
> + spin_unlock_irqrestore(&irq_lock, flags);
> }
> #endif
>
> @@ -405,21 +407,6 @@ int um_request_irq(unsigned int irq, int
> EXPORT_SYMBOL(um_request_irq);
> EXPORT_SYMBOL(reactivate_fd);
>
> -static DEFINE_SPINLOCK(irq_spinlock);
> -
> -unsigned long irq_lock(void)
> -{
> - unsigned long flags;
> -
> - spin_lock_irqsave(&irq_spinlock, flags);
> - return flags;
> -}
> -
> -void irq_unlock(unsigned long flags)
> -{
> - spin_unlock_irqrestore(&irq_spinlock, flags);
> -}
> -
> /* hw_interrupt_type must define (startup || enable) &&
> * (shutdown || disable) && end */
> static void dummy(unsigned int irq)
>
>
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> User-mode-linux-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
>



--
Alessandro Salvatori

--
Alessandro Salvatori


2006-08-04 14:15:18

by Jeff Dike

[permalink] [raw]
Subject: Re: [uml-devel] [PATCH 10/19] UML - Remove spinlock wrapper functions

On Fri, Aug 04, 2006 at 01:00:43PM +0000, alessandro salvatori wrote:
> the new lock irq_lock is still static, but we now have preprocessor
> macros to be included from a header file instead of non-static functions in
> the same module as the static irq_lock.

I don't understand. The changes in this patch are -
remove two functions and their declarations
replace calls to those functions with spin_lock_irq_save and
spin_unlock_irqsave
move the spinlock declaration above the spin_(un)lock_irq_save
calls

Which of these are you talking about?

Jeff

2006-08-05 11:47:20

by Blaisorblade

[permalink] [raw]
Subject: Re: [uml-devel] [PATCH 10/19] UML - Remove spinlock wrapper functions

On Friday 04 August 2006 15:00, alessandro salvatori wrote:
> Jeff,
>
> the new lock irq_lock is still static, but we now have preprocessor
> macros to be included from a header file

Are you talking about spin_lock_irqsave & co? In that case you have maybe
missed that the removed functions were simply wrappers for spin_lock_irqsave.
Those wrappers existed to be used in files which can't include kernel headers
(long story).

> instead of non-static functions in
> the same module as the static irq_lock.

> Am I missing something?
--
Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!".
Paolo Giarrusso, aka Blaisorblade
http://www.user-mode-linux.org/~blaisorblade
Chiacchiera con i tuoi amici in tempo reale!
http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com