> From: David Gwynne <[email protected]> > Date: Thu, 30 Jan 2014 09:59:15 +1000 > > is there anything in particular you're supposed to look for to see if it is > or isnt working? > > either it locks up the machine (deadlock) or doesnt?
Something like that. > On 29 Jan 2014, at 8:06 pm, Mark Kettenis <[email protected]> wrote: > > > Here is a diff that makes mutexes raise their ipl to the highest level > > that has interrupts that take the kernel lock. This is necessary for > > the work dlg@ has been doing on making subsystems run without the > > kernel lock. > > > > This needs to be tested on an MP system, and unfortunately that's > > something I cannot do. > > > > > > Index: include/mutex.h > > =================================================================== > > RCS file: /cvs/src/sys/arch/hppa/include/mutex.h,v > > retrieving revision 1.4 > > diff -u -p -r1.4 mutex.h > > --- include/mutex.h 10 Jan 2010 04:07:18 -0000 1.4 > > +++ include/mutex.h 29 Jan 2014 10:01:52 -0000 > > @@ -39,9 +39,24 @@ struct mutex { > > void *mtx_owner; > > }; > > > > -void mtx_init(struct mutex *, int); > > +/* > > + * To prevent lock ordering problems with the kernel lock, we need to > > + * make sure we block all interrupts that can grab the kernel lock. > > + * The simplest way to achieve this is to make sure mutexes always > > + * raise the interrupt priority level to the highest level that has > > + * interrupts that grab the kernel lock. > > + */ > > +#ifdef MULTIPROCESSOR > > +#define __MUTEX_IPL(ipl) \ > > + (((ipl) > IPL_NONE && (ipl) < IPL_AUDIO) ? IPL_AUDIO : (ipl)) > > +#else > > +#define __MUTEX_IPL(ipl) (ipl) > > +#endif > > > > -#define MUTEX_INITIALIZER(ipl) { MUTEX_UNLOCKED, (ipl), 0, NULL } > > +#define MUTEX_INITIALIZER(ipl) { MUTEX_UNLOCKED, __MUTEX_IPL((ipl)), 0, > > NULL } > > + > > +void __mtx_init(struct mutex *, int); > > +#define mtx_init(mtx, ipl) __mtx_init((mtx), __MUTEX_IPL((ipl))) > > > > #ifdef DIAGNOSTIC > > #define MUTEX_ASSERT_LOCKED(mtx) do { > > \ > > Index: hppa/mutex.c > > =================================================================== > > RCS file: /cvs/src/sys/arch/hppa/hppa/mutex.c,v > > retrieving revision 1.11 > > diff -u -p -r1.11 mutex.c > > --- hppa/mutex.c 20 Apr 2011 16:10:53 -0000 1.11 > > +++ hppa/mutex.c 29 Jan 2014 10:01:52 -0000 > > @@ -50,7 +50,7 @@ try_lock(struct mutex *mtx) > > } > > > > void > > -mtx_init(struct mutex *mtx, int wantipl) > > +__mtx_init(struct mutex *mtx, int wantipl) > > { > > mtx->mtx_lock[0] = 1; > > mtx->mtx_lock[1] = 1; > > > > >
