> > > If there is a working ll/sc emulation fine - Currently there is none > > > so the only way to go TODAY is sysmips. > > > > I'll work on one in the background. It should be pretty straightforward > > for the uniprocessor case, but an SMP version will be messier, and > > possibly require a platform-dependent hook. Of course, the same > > is true of sysmips()... > > For SMP versions we could currently just put an "#error" in it. There has > to be machine dependent support as the older SGI Challenge have. So dont > worry on that case. I've just glanced at the unfinished ll emulation code in the 2.4.3 baseline. It looks like someone was trying to do a full and precise emulation of the instruction as documented, which is admirable but horribly difficult. The trick is that one can be aggressive in clearing the lock "flip flop". In real CPU's for example, the flop is cleared on every exception taken. Emulating that alone would make for a semi-functional operation, at least in terms of protecting kernel threads. One needs to do a bit more to cover user-level multithreading. Stricktly speaking, one should search the entire address space of the executing task and tag all virtual pages that map to the targeted physical page as being non-writable, and on a write protect error clear both the ll bit and the protections. On a sc, one can either do nothing or proactively make the pages writable. I find the notion of the *same* task having a lock cell virtually aliased to be wildly improbable, and would be tempted to consider elimitating the reverse translation and only flagging the page where the ll/sc is taking place. That would not be 100% correct emulation, but I would be very surprised to find any code that would notice. Regards, Kevin K.