Date: Sat, 2 Nov 2013 19:14:22 +0000 (UTC) From: Marcel Moolenaar <marcel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r257553 - projects/altix2/sys/ia64/sgisn Message-ID: <201311021914.rA2JEMEi006845@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: marcel Date: Sat Nov 2 19:14:22 2013 New Revision: 257553 URL: http://svnweb.freebsd.org/changeset/base/257553 Log: 1. Assign shub_dev only for domain 0. The whole thing is wrong anyway. What we need is affinity between CPUs and Shub ASICs so that we can have the per-CPU structure hold the pointer to the SHub device that CPU is connected to. With that, we then need to bind interrupts only to CPUs within the same node and ll will be fine. This change merely makes domain 0 work all the time, which gives us a more reliable baseline for running natively while adding nodes. 2. Cast sc->sc_nasid to a 64-bit type before we shift the value left by more than 32 bits. Without that the memory mapped I/O address would always be targeting the SHub with NASID 0. 3. Create the RTC device when we create the SN console device. No need to make it a separate conditional that effectively ends up doing the same thing. Modified: projects/altix2/sys/ia64/sgisn/sgisn_shub.c Modified: projects/altix2/sys/ia64/sgisn/sgisn_shub.c ============================================================================== --- projects/altix2/sys/ia64/sgisn/sgisn_shub.c Sat Nov 2 18:40:18 2013 (r257552) +++ projects/altix2/sys/ia64/sgisn/sgisn_shub.c Sat Nov 2 19:14:22 2013 (r257553) @@ -385,7 +385,8 @@ sgisn_shub_attach(device_t dev) sc->sc_dev = dev; sc->sc_domain = device_get_unit(dev); - shub_dev = dev; + if (sc->sc_domain == 0) + shub_dev = dev; /* * Get the physical memory region that is connected to the MD I/F @@ -416,7 +417,7 @@ sgisn_shub_attach(device_t dev) sc->sc_nasid = (sc->sc_membase >> sc->sc_nasid_shft) & sc->sc_nasid_mask; - sc->sc_mmraddr = (sc->sc_nasid << sc->sc_nasid_shft) | + sc->sc_mmraddr = ((vm_paddr_t)sc->sc_nasid << sc->sc_nasid_shft) | (((sc->sc_hubtype == 0) ? 9UL : 3UL) << 32); sc->sc_tag = IA64_BUS_SPACE_MEM; bus_space_map(sc->sc_tag, sc->sc_mmraddr, 1UL << 32, 0, &sc->sc_hndl); @@ -447,14 +448,12 @@ sgisn_shub_attach(device_t dev) for (wdgt = 0; wdgt < SGISN_HUB_NWIDGETS; wdgt++) sc->sc_fwhub->hub_widget[wdgt].wgt_hub = sc->sc_fwhub; - /* Create a child for the SAL-based console. */ + /* Create a child for the SAL-based console and the RTC. */ r = ia64_sal_entry(SAL_SGISN_MASTER_NASID, 0, 0, 0, 0, 0, 0, 0); if (r.sal_status == 0 && r.sal_result[0] == sc->sc_nasid) { child = device_add_child(dev, "sncon", -1); device_set_ivars(child, (void *)(uintptr_t)~0UL); - } - if (sc->sc_nasid == 0) { /* Use the SHub's RTC as a time counter. */ r = ia64_sal_entry(SAL_FREQ_BASE, 2, 0, 0, 0, 0, 0, 0); if (r.sal_status == 0) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311021914.rA2JEMEi006845>