Hey Tom- On Tue, Aug 14, 2018 at 01:54:02PM -0500, Tom Zanussi wrote: > v3.18.117-rt105 rt-stable review patch. If anyone has any objections, > please let me know. > > ------------------ > > From: Julia Cartwright <julia@xxxxxx> > > [ Upstream rt-devel commit c160736542d7b3d67da32848d2f028b8e35730e5 ] > > Currently, the squashfs multi_cpu decompressor makes use of > get_cpu_ptr()/put_cpu_ptr(), which unconditionally disable preemption > during decompression. > > Because the workload is distributed across CPUs, all CPUs can observe a > very high wakeup latency, which has been seen to be as much as 8000us. > > Convert this decompressor to make use of a local lock, which will allow > execution of the decompressor with preemption-enabled, but also ensure > concurrent accesses to the percpu compressor data on the local CPU will > be serialized. > > Cc: stable-rt@xxxxxxxxxxxxxxx > Reported-by: Alexander Stein <alexander.stein@xxxxxxxxxxxxxxxxxxxxx> > Tested-by: Alexander Stein <alexander.stein@xxxxxxxxxxxxxxxxxxxxx> > Signed-off-by: Julia Cartwright <julia@xxxxxx> > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> > Signed-off-by: Tom Zanussi <tom.zanussi@xxxxxxxxxxxxxxx> > --- [..] > void *squashfs_decompressor_create(struct squashfs_sb_info *msblk, > void *comp_opts) > { > @@ -79,10 +82,15 @@ int squashfs_decompress(struct squashfs_sb_info *msblk, struct buffer_head **bh, > { > struct squashfs_stream __percpu *percpu = > (struct squashfs_stream __percpu *) msblk->stream; > - struct squashfs_stream *stream = get_cpu_ptr(percpu); > - int res = msblk->decompressor->decompress(msblk, stream->stream, bh, b, > - offset, length, output); > - put_cpu_ptr(stream); > + struct squashfs_stream *stream; > + int res; > + > + stream = get_locked_ptr(stream_lock, percpu); This patch depends on the introduction of the {get,put}_locked_ptr() per-cpu access variants. So, you'll want to also pull commit 3d45cf23db4f76cd3 ("locallock: provide {get,put}_locked_ptr() variants") >From rt-devel as well. Julia