Mailing List Archive

[PATCH] two more fixes for c/s 19419
vector_channel[], as its name already says, is vector-, not irq-indexed.

hpet_assign_irq() sits not only in the boot path, but also in the
resume one. Short of knowing why this is, simply checking whether a
vector was already assigned prevents leaking previously assigned ones.

Signed-off-by: Jan Beulich <jbeulich@novell.com>

--- 2009-03-27.orig/xen/arch/x86/hpet.c 2009-04-01 11:28:25.000000000 +0200
+++ 2009-03-27/xen/arch/x86/hpet.c 2009-04-01 14:02:18.000000000 +0200
@@ -45,7 +45,7 @@ static unsigned int num_hpets_used; /* m

DEFINE_PER_CPU(struct hpet_event_channel *, cpu_bc_channel);

-static int vector_channel[NR_IRQS] = {[0 ... NR_IRQS-1] = -1};
+static int vector_channel[NR_VECTORS] = {[0 ... NR_VECTORS-1] = -1};

#define vector_to_channel(vector) vector_channel[vector]

@@ -345,6 +345,9 @@ static int hpet_assign_irq(struct hpet_e
{
unsigned int vector;

+ if ( ch->vector )
+ return 0;
+
vector = assign_irq_vector(AUTO_ASSIGN_IRQ);
if ( (int)vector < 0 )
return vector;




_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
RE: [PATCH] two more fixes for c/s 19419 [ In reply to ]
ACK.

On Wednesday, April 01, 2009 8:54 PM, Jan Beulich wrote:
> vector_channel[], as its name already says, is vector-, not irq-indexed.
>
> hpet_assign_irq() sits not only in the boot path, but also in the
> resume one. Short of knowing why this is, simply checking whether a
> vector was already assigned prevents leaking previously assigned ones.
>
> Signed-off-by: Jan Beulich <jbeulich@novell.com>
>
> --- 2009-03-27.orig/xen/arch/x86/hpet.c 2009-04-01 11:28:25.000000000 +0200
> +++ 2009-03-27/xen/arch/x86/hpet.c 2009-04-01 14:02:18.000000000 +0200
> @@ -45,7 +45,7 @@ static unsigned int num_hpets_used; /* m
>
> DEFINE_PER_CPU(struct hpet_event_channel *, cpu_bc_channel);
>
> -static int vector_channel[NR_IRQS] = {[0 ... NR_IRQS-1] = -1};
> +static int vector_channel[NR_VECTORS] = {[0 ... NR_VECTORS-1] = -1};
>
> #define vector_to_channel(vector) vector_channel[vector]
>
> @@ -345,6 +345,9 @@ static int hpet_assign_irq(struct hpet_e
> {
> unsigned int vector;
>
> + if ( ch->vector )
> + return 0;
> +
> vector = assign_irq_vector(AUTO_ASSIGN_IRQ);
> if ( (int)vector < 0 )
> return vector;
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel