Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 212202
b: refs/heads/master
c: 08c33db
h: refs/heads/master
v: v3
  • Loading branch information
Thomas Gleixner committed Oct 12, 2010
1 parent 4549ccc commit d997761
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 8 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: 6e2fff50a5bd72a3f9e6f3ef6e9137efddb2d580
refs/heads/master: 08c33db6d044d9dc74ddf8d9ee3cb1fa3eca262b
54 changes: 47 additions & 7 deletions trunk/arch/x86/kernel/apic/io_apic.c
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,13 @@ static struct irq_cfg *get_one_free_irq_cfg(int node)
return NULL;
}

static void free_irq_cfg(struct irq_cfg *cfg)
{
free_cpumask_var(cfg->domain);
free_cpumask_var(cfg->old_domain);
kfree(cfg);
}

int arch_init_chip_data(struct irq_desc *desc, int node)
{
struct irq_cfg *cfg;
Expand Down Expand Up @@ -299,13 +306,6 @@ void arch_init_copy_chip_data(struct irq_desc *old_desc,
init_copy_irq_2_pin(old_cfg, cfg, node);
}

static void free_irq_cfg(struct irq_cfg *cfg)
{
free_cpumask_var(cfg->domain);
free_cpumask_var(cfg->old_domain);
kfree(cfg);
}

void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc)
{
struct irq_cfg *old_cfg, *cfg;
Expand All @@ -325,13 +325,53 @@ void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc)
/* end for move_irq_desc */

#else

struct irq_cfg *irq_cfg(unsigned int irq)
{
return irq < nr_irqs ? irq_cfgx + irq : NULL;
}

static struct irq_cfg *get_one_free_irq_cfg(unsigned int irq, int node)
{
return irq_cfgx + irq;
}

static inline void free_irq_cfg(struct irq_cfg *cfg) { }

#endif

static struct irq_cfg *alloc_irq_and_cfg_at(unsigned int at, int node)
{
int res = irq_alloc_desc_at(at, node);
struct irq_cfg *cfg;

if (res < 0) {
if (res != -EEXIST)
return NULL;
cfg = get_irq_chip_data(at);
if (cfg)
return cfg;
}

cfg = get_one_free_irq_cfg(node);
if (cfg)
set_irq_chip_data(at, cfg);
else
irq_free_desc(at);
return cfg;
}

static int alloc_irq_from(unsigned int from, int node)
{
return irq_alloc_desc_from(from, node);
}

static void free_irq_at(unsigned int at, struct irq_cfg *cfg)
{
free_irq_cfg(cfg);
irq_free_desc(at);
}

struct io_apic {
unsigned int index;
unsigned int unused[3];
Expand Down

0 comments on commit d997761

Please sign in to comment.