Fast sigblock (AKA rtld speedup)

Konstantin Belousov kostikbel at gmail.com
Tue Jan 8 00:08:47 UTC 2013


On Mon, Jan 07, 2013 at 03:42:01PM -0500, Alfred Perlstein wrote:
> On 1/7/13 1:22 PM, Konstantin Belousov wrote:
> > Below is the forward of the patch for which I failed to obtain a private
> > review. Might be, the list generates more responses.
> Very cool.
> 
> Sorry for being rusty here, but is it safe to call fuword in the middle 
> of issignal()?
> 
> The reason I ask is because it looks like proc lock is required for this 
> block, and I forget it fuword(9) can fault.
> 
> If fuword(9) can fault then I don't think you can do this.
> 
> You'll need to use something like fuswintr(9) or wire the page down 
> using vslock(9) or something.
> 
> I am probably missing something?

No, you are completely right. This is a serious bug. Thank you.

I was careful to code the td_sigblock_val prefetch etc, but failed
to do the update properly. There is no reason to execute the update
in the issignal() at all, the setting of the pending bit can be postponed
to the moment after the postsig() loop was executed.

I uploaded the updated but not yet tested patch at
http://people.freebsd.org/~kib/misc/rtld-sigblock.1.patch
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20130108/00ba99c5/attachment.sig>


More information about the freebsd-arch mailing list