Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 136378
b: refs/heads/master
c: c7a3589
h: refs/heads/master
v: v3
  • Loading branch information
Mike Travis authored and Ingo Molnar committed Jan 11, 2009
1 parent db72540 commit 13b55dd
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d38b223c86db3162dc85b5a1997ac8a210e1660b
refs/heads/master: c7a3589e7a1f8fdbd2536fe1bfa60b37f5121c69
21 changes: 16 additions & 5 deletions trunk/drivers/xen/events.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,14 @@ enum {
static int evtchn_to_irq[NR_EVENT_CHANNELS] = {
[0 ... NR_EVENT_CHANNELS-1] = -1
};
static unsigned long cpu_evtchn_mask[NR_CPUS][NR_EVENT_CHANNELS/BITS_PER_LONG];
struct cpu_evtchn_s {
unsigned long bits[NR_EVENT_CHANNELS/BITS_PER_LONG];
};
static struct cpu_evtchn_s *cpu_evtchn_mask_p;
static inline unsigned long *cpu_evtchn_mask(int cpu)
{
return cpu_evtchn_mask_p[cpu].bits;
}
static u8 cpu_evtchn[NR_EVENT_CHANNELS];

/* Reference counts for bindings to IRQs. */
Expand Down Expand Up @@ -115,7 +122,7 @@ static inline unsigned long active_evtchns(unsigned int cpu,
unsigned int idx)
{
return (sh->evtchn_pending[idx] &
cpu_evtchn_mask[cpu][idx] &
cpu_evtchn_mask(cpu)[idx] &
~sh->evtchn_mask[idx]);
}

Expand All @@ -128,8 +135,8 @@ static void bind_evtchn_to_cpu(unsigned int chn, unsigned int cpu)
cpumask_copy(irq_to_desc(irq)->affinity, cpumask_of(cpu));
#endif

__clear_bit(chn, cpu_evtchn_mask[cpu_evtchn[chn]]);
__set_bit(chn, cpu_evtchn_mask[cpu]);
__clear_bit(chn, cpu_evtchn_mask(cpu_evtchn[chn]));
__set_bit(chn, cpu_evtchn_mask(cpu));

cpu_evtchn[chn] = cpu;
}
Expand All @@ -147,7 +154,7 @@ static void init_evtchn_cpu_bindings(void)
#endif

memset(cpu_evtchn, 0, sizeof(cpu_evtchn));
memset(cpu_evtchn_mask[0], ~0, sizeof(cpu_evtchn_mask[0]));
memset(cpu_evtchn_mask(0), ~0, sizeof(cpu_evtchn_mask(0)));
}

static inline unsigned int cpu_from_evtchn(unsigned int evtchn)
Expand Down Expand Up @@ -822,6 +829,10 @@ static struct irq_chip xen_dynamic_chip __read_mostly = {
void __init xen_init_IRQ(void)
{
int i;
size_t size = nr_cpu_ids * sizeof(struct cpu_evtchn_s);

cpu_evtchn_mask_p = kmalloc(size, GFP_KERNEL);
BUG_ON(cpu_evtchn_mask == NULL);

init_evtchn_cpu_bindings();

Expand Down

0 comments on commit 13b55dd

Please sign in to comment.