Skip site navigation (1)Skip section navigation (2)
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>