On Wed, 2016-10-19 at 18:54 +0200, Sebastian Andrzej Siewior wrote: > On 2016-10-19 17:56:30 [+0200], Mike Galbraith wrote: > > In v4.7, the driver switched to percpu compression streams, disabling > > preemption vai get/put_cpu_ptr(). Use a local lock instead for RT. > > We also have to fix an RT lock order issue in zram_decompress_page() > > such that zs_map_object() nests inside of zcomp_stream_put() as it > > does in zram_bvec_write(). > > good. I almost had it myself. So let me get that one. And your previous > one (the spinlock replacement) looks also reasonable. With this hunk > > @@ -313,6 +314,7 @@ struct mapping_area { > #endif > char *vm_addr; /* address of kmap_atomic()'ed pages */ > enum zs_mapmode vm_mm; /* mapping mode */ > + spinlock_t ma_lock; > }; > > #ifdef CONFIG_COMPACTION > @@ -1489,6 +1491,7 @@ void *zs_map_object(struct zs_pool *pool, unsigned long handle, > off = (class->size * obj_idx) & ~PAGE_MASK; > > area = per_cpu_ptr(&zs_map_area, get_cpu_light()); > + spin_lock(&area->ma_lock); > area->vm_mm = mm; > if (off + class->size <= PAGE_SIZE) { > /* this object is contained entirely within a page */ > @@ -1542,6 +1545,7 @@ void zs_unmap_object(struct zs_pool *pool, unsigned long handle) > > __zs_unmap_object(area, pages, off, class->size); > } > + spin_unlock(&area->ma_lock); > put_cpu_light(); > > migrate_read_unlock(zspage); Ew, yeah, as the other, I thought it was covered, but nope. -Mike -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html