Date: Tue, 08 Jan 2013 01:21:48 -0500 From: Alfred Perlstein <bright@mu.org> To: Konstantin Belousov <kostikbel@gmail.com> Cc: arch@freebsd.org, toolchain@freebsd.org Subject: Re: Fast sigblock (AKA rtld speedup) Message-ID: <50EBBAFC.9070803@mu.org> In-Reply-To: <20130108000840.GA82219@kib.kiev.ua> References: <20130107182235.GA65279@kib.kiev.ua> <50EB3319.6060303@mu.org> <20130108000840.GA82219@kib.kiev.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
On 1/7/13 7:08 PM, Konstantin Belousov wrote: > 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 This new patch looks like it may have issues with PSTOP. there is a lot of code in issignal() that is missed when this code is in place, I have not audited the effect of this, are you sure this is what will work for the majority of cases? Honestly, if I were coding it for correctness I would vslock the pages (or otherwise wire them in) and let issignal() behave normally and not early exit from it. That said I may be missing something. -Alfred
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?50EBBAFC.9070803>