# HG changeset patch # User gingold@virtu10 # Node ID 96c7ebb42561e6e9ebe5474591487a2b3987dce9 # Parent 2c06898a1e8448dfe3b2efdfaa6a79493d362422 Enable and use ioports_deny_access for dom0. Signed-off-by: Tristan Gingold diff -r 2c06898a1e84 -r 96c7ebb42561 xen/arch/ia64/xen/mm.c --- a/xen/arch/ia64/xen/mm.c Mon Aug 07 09:08:45 2006 +0200 +++ b/xen/arch/ia64/xen/mm.c Tue Aug 08 08:16:11 2006 +0200 @@ -876,7 +876,7 @@ ioports_permit_access(struct domain *d, for (off = fp_offset; off <= lp_offset; off += PAGE_SIZE) __assign_domain_page(d, IO_PORTS_PADDR + off, - ia64_iobase + off, ASSIGN_nocache); + __pa(ia64_iobase) + off, ASSIGN_nocache); return 0; } @@ -897,18 +897,23 @@ ioports_deny_access(struct domain *d, un int ret; struct mm_struct *mm = &d->arch.mm; unsigned long off; + unsigned long io_ports_base; unsigned long fp_offset; unsigned long lp_offset; ret = rangeset_remove_range(d->arch.ioport_caps, fp, lp); if (ret != 0) return ret; - - fp_offset = IO_SPACE_SPARSE_ENCODING(fp) & ~PAGE_MASK; + if (d == dom0) + io_ports_base = __pa(ia64_iobase); + else + io_ports_base = IO_PORTS_PADDR; + + fp_offset = IO_SPACE_SPARSE_ENCODING(fp) & PAGE_MASK; lp_offset = PAGE_ALIGN(IO_SPACE_SPARSE_ENCODING(lp)); - for (off = fp_offset; off <= lp_offset; off += PAGE_SIZE) { - unsigned long mpaddr = IO_PORTS_PADDR + off; + for (off = fp_offset; off < lp_offset; off += PAGE_SIZE) { + unsigned long mpaddr = io_ports_base + off; unsigned long port; volatile pte_t *pte; pte_t old_pte; diff -r 2c06898a1e84 -r 96c7ebb42561 xen/arch/ia64/xen/xensetup.c --- a/xen/arch/ia64/xen/xensetup.c Mon Aug 07 09:08:45 2006 +0200 +++ b/xen/arch/ia64/xen/xensetup.c Tue Aug 08 08:16:11 2006 +0200 @@ -525,8 +525,10 @@ printk("num_online_cpus=%d, max_cpus=%d\ init_trace_bufs(); - if (opt_xencons) + if (opt_xencons) { console_endboot(); + serial_endboot(); + } domain0_ready = 1; diff -r 2c06898a1e84 -r 96c7ebb42561 xen/drivers/char/ns16550.c --- a/xen/drivers/char/ns16550.c Mon Aug 07 09:08:45 2006 +0200 +++ b/xen/drivers/char/ns16550.c Tue Aug 08 08:16:11 2006 +0200 @@ -249,16 +249,12 @@ static void ns16550_init_postirq(struct } } -#ifdef CONFIG_X86 static void ns16550_endboot(struct serial_port *port) { struct ns16550 *uart = port->uart; if ( ioports_deny_access(dom0, uart->io_base, uart->io_base + 7) != 0 ) BUG(); } -#else -#define ns16550_endboot NULL -#endif static int ns16550_irq(struct serial_port *port) {