Date: Thu, 27 Dec 2012 20:49:13 +0000 (UTC) From: Marcel Moolenaar <marcel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r244748 - projects/altix2/sys/ia64/ia64 Message-ID: <201212272049.qBRKnDjv054256@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: marcel Date: Thu Dec 27 20:49:13 2012 New Revision: 244748 URL: http://svnweb.freebsd.org/changeset/base/244748 Log: The local APIC memory address is set to 0 on Altix, because there's no local APIC. Don't call pmap_mapdev() when the address is 0. Also use this fact to determine whether to use the local APIC for IPIs or not. Modified: projects/altix2/sys/ia64/ia64/machdep.c projects/altix2/sys/ia64/ia64/mp_machdep.c Modified: projects/altix2/sys/ia64/ia64/machdep.c ============================================================================== --- projects/altix2/sys/ia64/ia64/machdep.c Thu Dec 27 20:47:34 2012 (r244747) +++ projects/altix2/sys/ia64/ia64/machdep.c Thu Dec 27 20:49:13 2012 (r244748) @@ -134,7 +134,7 @@ vm_offset_t ia64_port_base; u_int64_t ia64_lapic_addr = PAL_PIB_DEFAULT_ADDR; -struct ia64_pib *ia64_pib; +struct ia64_pib *ia64_pib = NULL; static int ia64_sync_icache_needed; @@ -285,7 +285,8 @@ cpu_startup(void *dummy) * information. */ ia64_probe_sapics(); - ia64_pib = pmap_mapdev(ia64_lapic_addr, sizeof(*ia64_pib)); + if (ia64_lapic_addr) + ia64_pib = pmap_mapdev(ia64_lapic_addr, sizeof(*ia64_pib)); ia64_mca_init(); Modified: projects/altix2/sys/ia64/ia64/mp_machdep.c ============================================================================== --- projects/altix2/sys/ia64/ia64/mp_machdep.c Thu Dec 27 20:47:34 2012 (r244747) +++ projects/altix2/sys/ia64/ia64/mp_machdep.c Thu Dec 27 20:49:13 2012 (r244748) @@ -522,14 +522,15 @@ ipi_send(struct pcpu *cpu, int xiv) sapic_id = IA64_LID_GET_SAPIC_ID(cpu->pc_md.lid); -#if 0 - ipip = &(ia64_pib->ib_ipi[sapic_id][0]); - ipi = xiv; -#else - ipip = (void *)(IA64_PHYS_TO_RR6(0x800000000UL) | - ((u_long)cpu->pc_md.sgisn_nasid << 38) | 0x110000380UL); - ipi = 0x80000001fdc00000UL | ((u_long)xiv << 52) | (sapic_id << 4); -#endif + if (ia64_pib != NULL) { + ipip = &(ia64_pib->ib_ipi[sapic_id][0]); + ipi = xiv; + } else { + ipip = (void *)(IA64_PHYS_TO_RR6(0x800000000UL) | + ((u_long)cpu->pc_md.sgisn_nasid << 38) | 0x110000380UL); + ipi = 0x80000001fdc00000UL | ((u_long)xiv << 52) | + (sapic_id << 4); + } ia64_mf(); ia64_st8(ipip, ipi);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212272049.qBRKnDjv054256>