NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: port-alpha/38335 (kernel freeze on alpha MP system)



The following reply was made to PR port-alpha/38335; it has been noted by GNATS.

From: "Michael L. Hitch" <mhitch%lightning.msu.montana.edu@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: jarle%uninett.no@localhost
Subject: Re: port-alpha/38335 (kernel freeze on alpha MP system)
Date: Tue, 27 Oct 2009 15:33:06 -0600 (MDT)

 On Mon, 26 Oct 2009, Jarle Greipsland wrote:
 
 > Results for the IPL_HIGH setting: It still has problems with the
 > pool_cache_get stuff.  A number of consecutive 'build.sh -j4'
 > resulted in console messages:
 > Whoa!  pool_cache_get returned an in-use entry! ci_index 0 pj 
 > 0xfffffc003f9efa00
 > Whoa!  pool_cache_get returned an in-use entry! ci_index 1 pj 
 > 0xfffffc003f9ee080
 > Whoa!  pool_cache_get returned an in-use entry! ci_index 1 pj 
 > 0xfffffc003f9ee440
 
    OK, here's something else to try.  I was looking through the alpha 
 hardware reference manual and checking some of the multiprocessor 
 information.  I noted that it showed the use of memory barriers when 
 sending/receiving interrupts between processors.  It looks like the atomic 
 operations that were used in the netbsd-4 branch included the memory 
 barrier, but the ones used in netbsd-5 and later do not.  This patch 
 should add back the memory barriers need for the IPI stuff.
 
 Index: sys/arch/alpha/alpha/ipifuncs.c
 ===================================================================
 RCS file: /cvsroot/src/sys/arch/alpha/alpha/ipifuncs.c,v
 retrieving revision 1.40
 diff -u -p -r1.40 ipifuncs.c
 --- sys/arch/alpha/alpha/ipifuncs.c    28 Apr 2008 20:23:10 -0000      1.40
 +++ sys/arch/alpha/alpha/ipifuncs.c    27 Oct 2009 21:23:05 -0000
 @@ -131,6 +131,7 @@ alpha_ipi_process(struct cpu_info *ci, s
        }
   #endif
 
 +      alpha_mb();
        pending_ipis = atomic_swap_ulong(&ci->ci_ipis, 0);
 
        /*
 @@ -167,6 +168,7 @@ alpha_send_ipi(u_long cpu_id, u_long ipi
   #endif
 
        atomic_or_ulong(&cpu_info[cpu_id]->ci_ipis, ipimask);
 +      alpha_mb();
        alpha_pal_wripir(cpu_id);
   }
 
 
 --
 Michael L. Hitch                       mhitch%montana.edu@localhost
 Computer Consultant
 Information Technology Center
 Montana State University       Bozeman, MT     USA
 


Home | Main Index | Thread Index | Old Index