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: [PATCH 4/7] acpi: use indirect call to register gsi in d

Peter,
I sent this patch a while back as part of the "PV on HVM: receive
interrupts as xen events" series (that it is based upon Konrad's
pcifront series, he sent another version to the list yesterday).

Do you think that this is a reasonble approach?

If you want to give a look at the whole series you can find it here:

http://lkml.org/lkml/2010/8/30/170

everything else is Xen specific stuff.

Thanks in advance,

Stefano


On Mon, 30 Aug 2010, stefano.stabellini@xxxxxxxxxxxxx wrote:
> From: Jeremy Fitzhardinge <jeremy@xxxxxxxx>
> 
> Rather than using a tree of conditionals, use function pointer
> for acpi_register_gsi.
> 
> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>
> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
> ---
>  arch/x86/kernel/acpi/boot.c |   59 ++++++++++++++++++++++++++++++------------
>  1 files changed, 42 insertions(+), 17 deletions(-)
> 
> diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
> index c05872a..031f0c2 100644
> --- a/arch/x86/kernel/acpi/boot.c
> +++ b/arch/x86/kernel/acpi/boot.c
> @@ -513,35 +513,61 @@ int acpi_isa_irq_to_gsi(unsigned isa_irq, u32 *gsi)
>       return 0;
>  }
>  
> -/*
> - * success: return IRQ number (>=0)
> - * failure: return < 0
> - */
> -int acpi_register_gsi(struct device *dev, u32 gsi, int trigger, int polarity)
> +static int acpi_register_gsi_pic(struct device *dev, u32 gsi,
> +                              int trigger, int polarity)
>  {
> -     unsigned int irq;
> -     unsigned int plat_gsi = gsi;
> -
>  #ifdef CONFIG_PCI
>       /*
>        * Make sure all (legacy) PCI IRQs are set as level-triggered.
>        */
> -     if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) {
> -             if (trigger == ACPI_LEVEL_SENSITIVE)
> -                     eisa_set_level_irq(gsi);
> -     }
> +     if (trigger == ACPI_LEVEL_SENSITIVE)
> +             eisa_set_level_irq(gsi);
>  #endif
>  
> +     return gsi;
> +}
> +
> +static int acpi_register_gsi_ioapic(struct device *dev, u32 gsi,
> +                                 int trigger, int polarity)
> +{
>  #ifdef CONFIG_X86_IO_APIC
> -     if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC) {
> -             plat_gsi = mp_register_gsi(dev, gsi, trigger, polarity);
> -     }
> +     gsi = mp_register_gsi(dev, gsi, trigger, polarity);
>  #endif
> +
> +     return gsi;
> +}
> +
> +static int (*__acpi_register_gsi)(struct device *dev, u32 gsi, int trigger, 
> int polarity) = acpi_register_gsi_pic;
> +
> +/*
> + * success: return IRQ number (>=0)
> + * failure: return < 0
> + */
> +int acpi_register_gsi(struct device *dev, u32 gsi, int trigger, int polarity)
> +{
> +     unsigned int irq;
> +     unsigned int plat_gsi = gsi;
> +
> +     plat_gsi = (*__acpi_register_gsi)(dev, gsi, trigger, polarity);
>       irq = gsi_to_irq(plat_gsi);
>  
>       return irq;
>  }
>  
> +void __init acpi_set_irq_model_pic(void)
> +{
> +     acpi_irq_model = ACPI_IRQ_MODEL_PIC;
> +     __acpi_register_gsi = acpi_register_gsi_pic;
> +     acpi_ioapic = 0;
> +}
> +
> +void __init acpi_set_irq_model_ioapic(void)
> +{
> +     acpi_irq_model = ACPI_IRQ_MODEL_IOAPIC;
> +     __acpi_register_gsi = acpi_register_gsi_ioapic;
> +     acpi_ioapic = 1;
> +}
> +
>  /*
>   *  ACPI based hotplug support for CPU
>   */
> @@ -1259,8 +1285,7 @@ static void __init acpi_process_madt(void)
>                        */
>                       error = acpi_parse_madt_ioapic_entries();
>                       if (!error) {
> -                             acpi_irq_model = ACPI_IRQ_MODEL_IOAPIC;
> -                             acpi_ioapic = 1;
> +                             acpi_set_irq_model_ioapic();
>  
>                               smp_found_config = 1;
>                       }
> -- 
> 1.5.6.5
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 

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

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