svn commit: r221481 - projects/altix/sys/ia64/ia64

Marcel Moolenaar marcel at FreeBSD.org
Thu May 5 03:57:44 UTC 2011


Author: marcel
Date: Thu May  5 03:57:43 2011
New Revision: 221481
URL: http://svn.freebsd.org/changeset/base/221481

Log:
  Implement ipi_send() for Altix. This is quick-n-dirty, but works.
  We have SMP up and running. I haven't had a chance to test whether
  ptc.g works properly (given that the SHub has a register for it),
  but that's easily found out.

Modified:
  projects/altix/sys/ia64/ia64/mp_machdep.c

Modified: projects/altix/sys/ia64/ia64/mp_machdep.c
==============================================================================
--- projects/altix/sys/ia64/ia64/mp_machdep.c	Thu May  5 03:42:04 2011	(r221480)
+++ projects/altix/sys/ia64/ia64/mp_machdep.c	Thu May  5 03:57:43 2011	(r221481)
@@ -497,14 +497,25 @@ ipi_all_but_self(int ipi)
 void
 ipi_send(struct pcpu *cpu, int xiv)
 {
+	uint64_t *ipip;
+	uint64_t ipi;
 	u_int sapic_id;
 
 	KASSERT(xiv != 0, ("ipi_send"));
 
 	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
+
 	ia64_mf();
-	ia64_st8(&(ia64_pib->ib_ipi[sapic_id][0]), xiv);
+	ia64_st8(ipip, ipi);
 	ia64_mf_a();
 	CTR3(KTR_SMP, "ipi_send(%p, %d): cpuid=%d", cpu, xiv, PCPU_GET(cpuid));
 }


More information about the svn-src-projects mailing list