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: [RFC PATCH 23/35] Add support for Xen event channels.

On Tue, 2006-03-21 at 22:31 -0800, Chris Wright wrote:
> plain text document attachment (22-evtchn)
> Support Xen event channels instead of the i8259 PIC.
> 
> Event channels are used to inject events into the kernel, either from
> the hypervisor or from another VM.  The injected events are mapped to
> interrupts.
> 
> If an event needs to be injected, the hypervisor causes an upcall into
> the kernel.  The upcall handler then scans the event pending bitmap
> and calls do_IRQ for each pending event.
> 
> Signed-off-by: Ian Pratt <ian.pratt@xxxxxxxxxxxxx>
> Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>
> Signed-off-by: Chris Wright <chrisw@xxxxxxxxxxxx>
> ---
>  arch/i386/kernel/Makefile               |    6 
>  arch/i386/mach-xen/evtchn.c             |  844 
> ++++++++++++++++++++++++++++++++
>  drivers/xen/core/Makefile               |    2 
>  include/asm-i386/hw_irq.h               |    4 
>  include/asm-i386/mach-xen/irq_vectors.h |  126 ++++
>  include/xen/evtchn.h                    |  113 ++++
>  6 files changed, 1093 insertions(+), 2 deletions(-)
> 
> --- xen-subarch-2.6.orig/arch/i386/kernel/Makefile
> +++ xen-subarch-2.6/arch/i386/kernel/Makefile
> @@ -5,7 +5,7 @@
>  extra-y := head.o init_task.o vmlinux.lds
>  
>  obj-y        := process.o semaphore.o signal.o entry.o traps.o irq.o \
> -             ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \
> +             ptrace.o time.o ioport.o ldt.o setup.o hw_irq.o sys_i386.o \
>               pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \
>               quirks.o i8237.o topology.o
>  
> @@ -42,6 +42,10 @@ EXTRA_AFLAGS   := -traditional
>  
>  obj-$(CONFIG_SCx200)         += scx200.o
>  
> +hw_irq-y                     := i8259.o
> +
> +hw_irq-$(CONFIG_XEN)         := ../mach-xen/evtchn.o
> +
>  # vsyscall.o contains the vsyscall DSO images as __initdata.
>  # We must build both images before we can assemble it.
>  # Note: kbuild does not track this dependency due to usage of .incbin
> --- xen-subarch-2.6.orig/include/asm-i386/hw_irq.h
> +++ xen-subarch-2.6/include/asm-i386/hw_irq.h
> @@ -68,7 +68,9 @@ extern atomic_t irq_mis_count;
>  
>  #define IO_APIC_IRQ(x) (((x) >= 16) || ((1<<(x)) & io_apic_irqs))
>  
> -#if defined(CONFIG_X86_IO_APIC)
> +#if defined(CONFIG_X86_XEN)
> +extern void hw_resend_irq(struct hw_interrupt_type *h, unsigned int i);
> +#elif defined(CONFIG_X86_IO_APIC)
>  static inline void hw_resend_irq(struct hw_interrupt_type *h, unsigned int i)
>  {
>       if (IO_APIC_IRQ(i))
> --- /dev/null
> +++ xen-subarch-2.6/arch/i386/mach-xen/evtchn.c
> @@ -0,0 +1,844 @@
> +/******************************************************************************
> + * evtchn.c
> + * 
> + * Communication via Xen event channels.
> + * 
> + * Copyright (c) 2002-2005, K A Fraser
> + * 
> + * This file may be distributed separately from the Linux kernel, or
> + * incorporated into other software packages, subject to the following 
> license:
> + * 


again no allowance for use inside the kernel


> + */
> +
> +#include <linux/config.h>
> +#include <linux/module.h>
> +#include <linux/irq.h>
> +#include <linux/interrupt.h>
> +#include <linux/sched.h>
> +#include <linux/kernel_stat.h>
> +#include <linux/version.h>

this highly looks that it's not possible to be used outside the linux
kernel so the license is odd

> +/* Convenient shorthand for packed representation of an unbound IRQ. */
> +#define IRQ_UNBOUND  mk_irq_info(IRQT_UNBOUND, 0, 0)
> +/* Accessor macros for packed IRQ information. */
> +#define evtchn_from_irq(irq) ((u16)(irq_info[irq]))
> +#define index_from_irq(irq)  ((u8)(irq_info[irq] >> 16))
> +#define type_from_irq(irq)   ((u8)(irq_info[irq] >> 24))

static inlines please

> +#ifdef CONFIG_XEN_EVTCHN_DEVICE
> +                             evtchn_device_upcall(port);
> +#else
> +                             mask_evtchn(port);
> +#endif

why this ifdef ?

> +static int find_unbound_irq(void)
> +{
> +     int irq;
> +
> +     for (irq = 0; irq < NR_IRQS; irq++)
> +             if (irq_bindcount[irq] == 0)
> +                     break;
> +
> +     if (irq == NR_IRQS) {
> +             printk(KERN_ERR "No available IRQ to bind to: increase 
> NR_IRQS!\n");

there is no way to share interrupts? A shame


> +EXPORT_SYMBOL(bind_virq_to_irqhandler);

this is highly low level interfact, please make this and the others a
_GPL export




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

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