ChangeSet 1.1277.2.1, 2005/04/11 15:03:24-06:00, djm@djmnc4000.(none)
Update to 2.6.11 patch files
Signed-off by: Dan Magenheimer (dan.magenheimer@xxxxxx)
arch/ia64/domain.c | 25 +-
arch/ia64/irq.c | 152 +++++++--------
arch/ia64/mm_init.c | 44 +++-
arch/ia64/patch/linux-2.6.11/bootmem.h | 14 +
arch/ia64/patch/linux-2.6.11/cpumask.h | 18 +
arch/ia64/patch/linux-2.6.11/current.h | 13 +
arch/ia64/patch/linux-2.6.11/efi.c | 34 +++
arch/ia64/patch/linux-2.6.11/entry.S | 116 +++++++++++
arch/ia64/patch/linux-2.6.11/hardirq.h | 13 +
arch/ia64/patch/linux-2.6.11/head.S | 50 +++++
arch/ia64/patch/linux-2.6.11/hpsim_irq.c | 25 ++
arch/ia64/patch/linux-2.6.11/hpsim_ssc.h | 11 +
arch/ia64/patch/linux-2.6.11/interrupt.h | 20 ++
arch/ia64/patch/linux-2.6.11/io.h | 14 +
arch/ia64/patch/linux-2.6.11/irq.h | 13 +
arch/ia64/patch/linux-2.6.11/irq_ia64.c | 43 ++++
arch/ia64/patch/linux-2.6.11/ivt.S | 278 ++++++++++++++++++++++++++++
arch/ia64/patch/linux-2.6.11/kernel-time.c | 37 +++
arch/ia64/patch/linux-2.6.11/kregs.h | 13 +
arch/ia64/patch/linux-2.6.11/lds.S | 19 +
arch/ia64/patch/linux-2.6.11/linuxextable.c | 13 +
arch/ia64/patch/linux-2.6.11/linuxhardirq.h | 22 ++
arch/ia64/patch/linux-2.6.11/linuxtime.h | 26 ++
arch/ia64/patch/linux-2.6.11/mca_asm.h | 25 ++
arch/ia64/patch/linux-2.6.11/minstate.h | 22 ++
arch/ia64/patch/linux-2.6.11/mm_contig.c | 171 +++++++++++++++++
arch/ia64/patch/linux-2.6.11/mmzone.h | 14 +
arch/ia64/patch/linux-2.6.11/page.h | 54 +++++
arch/ia64/patch/linux-2.6.11/pal.S | 22 ++
arch/ia64/patch/linux-2.6.11/pgalloc.h | 66 ++++++
arch/ia64/patch/linux-2.6.11/processor.h | 19 +
arch/ia64/patch/linux-2.6.11/sal.h | 21 ++
arch/ia64/patch/linux-2.6.11/series | 40 ++++
arch/ia64/patch/linux-2.6.11/setup.c | 155 +++++++++++++++
arch/ia64/patch/linux-2.6.11/slab.h | 14 +
arch/ia64/patch/linux-2.6.11/swiotlb.c | 63 ++++++
arch/ia64/patch/linux-2.6.11/system.h | 32 +++
arch/ia64/patch/linux-2.6.11/time.c | 143 ++++++++++++++
arch/ia64/patch/linux-2.6.11/tlb.c | 42 ++++
arch/ia64/patch/linux-2.6.11/types.h | 12 +
arch/ia64/patch/linux-2.6.11/unaligned.c | 74 +++++++
arch/ia64/patch/linux-2.6.11/wait.h | 28 ++
arch/ia64/tools/mkbuildtree | 41 ++--
arch/ia64/xenasm.S | 16 -
arch/ia64/xenmisc.c | 11 +
include/asm-ia64/config.h | 21 +-
include/asm-ia64/mm.h | 19 -
47 files changed, 2004 insertions(+), 134 deletions(-)
diff -Nru a/xen/arch/ia64/domain.c b/xen/arch/ia64/domain.c
--- a/xen/arch/ia64/domain.c 2005-04-20 05:02:59 -04:00
+++ b/xen/arch/ia64/domain.c 2005-04-20 05:02:59 -04:00
@@ -289,6 +289,7 @@
struct mm_struct *mm = d->arch.mm;
struct page *p = (struct page *)0;
pgd_t *pgd;
+ pud_t *pud;
pmd_t *pmd;
pte_t *pte;
extern unsigned long vhpt_paddr, vhpt_pend;
@@ -299,9 +300,13 @@
}
pgd = pgd_offset(mm,mpaddr);
if (pgd_none(*pgd))
- pgd_populate(mm, pgd, pmd_alloc_one(mm,mpaddr));
+ pgd_populate(mm, pgd, pud_alloc_one(mm,mpaddr));
- pmd = pmd_offset(pgd, mpaddr);
+ pud = pud_offset(pgd, mpaddr);
+ if (pud_none(*pud))
+ pud_populate(mm, pud, pmd_alloc_one(mm,mpaddr));
+
+ pmd = pmd_offset(pud, mpaddr);
if (pmd_none(*pmd))
pmd_populate_kernel(mm, pmd, pte_alloc_one_kernel(mm,mpaddr));
// pmd_populate(mm, pmd, pte_alloc_one(mm,mpaddr));
@@ -338,6 +343,7 @@
{
struct mm_struct *mm = d->arch.mm;
pgd_t *pgd = pgd_offset(mm, mpaddr);
+ pud_t *pud;
pmd_t *pmd;
pte_t *pte;
@@ -356,14 +362,17 @@
#endif
tryagain:
if (pgd_present(*pgd)) {
- pmd = pmd_offset(pgd,mpaddr);
- if (pmd_present(*pmd)) {
- pte = pte_offset_map(pmd,mpaddr);
- if (pte_present(*pte)) {
+ pud = pud_offset(pgd,mpaddr);
+ if (pud_present(*pud)) {
+ pmd = pmd_offset(pud,mpaddr);
+ if (pmd_present(*pmd)) {
+ pte = pte_offset_map(pmd,mpaddr);
+ if (pte_present(*pte)) {
//printk("lookup_domain_page: found mapping for %lx,
pte=%lx\n",mpaddr,pte_val(*pte));
- return *(unsigned long *)pte;
+ return *(unsigned long *)pte;
+ }
}
- }
+ }
}
/* if lookup fails and mpaddr is "legal", "create" the page */
if ((mpaddr >> PAGE_SHIFT) < d->max_pages) {
diff -Nru a/xen/arch/ia64/irq.c b/xen/arch/ia64/irq.c
--- a/xen/arch/ia64/irq.c 2005-04-20 05:02:59 -04:00
+++ b/xen/arch/ia64/irq.c 2005-04-20 05:02:59 -04:00
@@ -492,101 +492,101 @@
* SMP cross-CPU interrupts have their own specific
* handlers).
*/
-unsigned int do_IRQ(unsigned long irq, struct pt_regs *regs)
+fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs)
{
- /*
- * We ack quickly, we don't want the irq controller
- * thinking we're snobs just because some other CPU has
- * disabled global interrupts (we have already done the
- * INT_ACK cycles, it's too late to try to pretend to the
- * controller that we aren't taking the interrupt).
- *
- * 0 return value means that this irq is already being
- * handled by some other CPU. (or is disabled)
- */
- irq_desc_t *desc = irq_descp(irq);
+ irq_desc_t *desc = irq_desc + irq;
struct irqaction * action;
- irqreturn_t action_ret;
unsigned int status;
- int cpu;
-
- cpu = smp_processor_id(); /* for CONFIG_PREEMPT, this must come after
irq_enter()! */
#ifndef XEN
- kstat_cpu(cpu).irqs[irq]++;
+ kstat_this_cpu.irqs[irq]++;
#endif
-
if (desc->status & IRQ_PER_CPU) {
- /* no locking required for CPU-local interrupts: */
+ irqreturn_t action_ret;
+
+ /*
+ * No locking required for CPU-local interrupts:
+ */
desc->handler->ack(irq);
action_ret = handle_IRQ_event(irq, regs, desc->action);
+#ifndef XEN
+ if (!noirqdebug)
+ note_interrupt(irq, desc, action_ret);
+#endif
desc->handler->end(irq);
- } else {
- spin_lock(&desc->lock);
- desc->handler->ack(irq);
- /*
- * REPLAY is when Linux resends an IRQ that was dropped earlier
- * WAITING is used by probe to mark irqs that are being tested
- */
+ return 1;
+ }
+
+ spin_lock(&desc->lock);
+ desc->handler->ack(irq);
+ /*
+ * REPLAY is when Linux resends an IRQ that was dropped earlier
+ * WAITING is used by probe to mark irqs that are being tested
+ */
#ifdef XEN
- status = desc->status & ~IRQ_REPLAY;
+ status = desc->status & ~IRQ_REPLAY;
#else
- status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING);
+ status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING);
#endif
- status |= IRQ_PENDING; /* we _want_ to handle it */
+ status |= IRQ_PENDING; /* we _want_ to handle it */
- /*
- * If the IRQ is disabled for whatever reason, we cannot
- * use the action we have.
- */
- action = NULL;
- if (likely(!(status & (IRQ_DISABLED | IRQ_INPROGRESS)))) {
- action = desc->action;
- status &= ~IRQ_PENDING; /* we commit to handling */
- status |= IRQ_INPROGRESS; /* we are handling it */
- }
- desc->status = status;
+ /*
+ * If the IRQ is disabled for whatever reason, we cannot
+ * use the action we have.
+ */
+ action = NULL;
+ if (likely(!(status & (IRQ_DISABLED | IRQ_INPROGRESS)))) {
+ action = desc->action;
+ status &= ~IRQ_PENDING; /* we commit to handling */
+ status |= IRQ_INPROGRESS; /* we are handling it */
+ }
+ desc->status = status;
- /*
- * If there is no IRQ handler or it was disabled, exit early.
- * Since we set PENDING, if another processor is handling
- * a different instance of this same irq, the other processor
- * will take care of it.
- */
- if (unlikely(!action))
- goto out;
+ /*
+ * If there is no IRQ handler or it was disabled, exit early.
+ * Since we set PENDING, if another processor is handling
+ * a different instance of this same irq, the other processor
+ * will take care of it.
+ */
+ if (unlikely(!action))
+ goto out;
- /*
- * Edge triggered interrupts need to remember
- * pending events.
- * This applies to any hw interrupts that allow a second
- * instance of the same irq to arrive while we are in do_IRQ
- * or in the handler. But the code here only handles the
_second_
- * instance of the irq, not the third or fourth. So it is mostly
- * useful for irq hardware that does not mask cleanly in an
- * SMP environment.
- */
- for (;;) {
- spin_unlock(&desc->lock);
- action_ret = handle_IRQ_event(irq, regs, action);
- spin_lock(&desc->lock);
+ /*
+ * Edge triggered interrupts need to remember
+ * pending events.
+ * This applies to any hw interrupts that allow a second
+ * instance of the same irq to arrive while we are in do_IRQ
+ * or in the handler. But the code here only handles the _second_
+ * instance of the irq, not the third or fourth. So it is mostly
+ * useful for irq hardware that does not mask cleanly in an
+ * SMP environment.
+ */
+ for (;;) {
+ irqreturn_t action_ret;
+
+ spin_unlock(&desc->lock);
+
+ action_ret = handle_IRQ_event(irq, regs, action);
+
+ spin_lock(&desc->lock);
#ifndef XEN
- if (!noirqdebug)
- note_interrupt(irq, desc, action_ret);
+ if (!noirqdebug)
+ note_interrupt(irq, desc, action_ret);
#endif
- if (!(desc->status & IRQ_PENDING))
- break;
- desc->status &= ~IRQ_PENDING;
- }
- desc->status &= ~IRQ_INPROGRESS;
- out:
- /*
- * The ->end() handler has to deal with interrupts which got
- * disabled while the handler was running.
- */
- desc->handler->end(irq);
- spin_unlock(&desc->lock);
+ if (likely(!(desc->status & IRQ_PENDING)))
+ break;
+ desc->status &= ~IRQ_PENDING;
}
+ desc->status &= ~IRQ_INPROGRESS;
+
+out:
+ /*
+ * The ->end() handler has to deal with interrupts which got
+ * disabled while the handler was running.
+ */
+ desc->handler->end(irq);
+ spin_unlock(&desc->lock);
+
return 1;
}
diff -Nru a/xen/arch/ia64/mm_init.c b/xen/arch/ia64/mm_init.c
--- a/xen/arch/ia64/mm_init.c 2005-04-20 05:02:59 -04:00
+++ b/xen/arch/ia64/mm_init.c 2005-04-20 05:02:59 -04:00
@@ -102,6 +102,39 @@
/////////////////////////////////////////////
//following from linux/mm/memory.c
+#ifndef __ARCH_HAS_4LEVEL_HACK
+/*
+ * Allocate page upper directory.
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|