On Wed, Mar 6, 2019 at 2:05 AM Yongxin Liu <yongxin.liu@xxxxxxxxxxxxx> wrote: > > Currently, nvdimm driver isn't RT compatible. > nd_region_acquire_lane() disables preemption with get_cpu() which > causes "scheduling while atomic" spews on RT, when using fio to test > pmem as block device. > > In this change, we replace get_cpu/put_cpu with local_lock_cpu/ > local_unlock_cpu, and introduce per CPU variable "ndl_local_lock". > Due to preemption on RT, this lock can avoid race condition for the > same lane on the same CPU. When CPU number is greater than the lane > number, lane can be shared among CPUs. "ndl_lock->lock" is used to > protect the lane in this situation. > > This patch is derived from Dan Williams and Pankaj Gupta's proposal from > https://www.mail-archive.com/linux-nvdimm@xxxxxxxxxxxx/msg13359.html > and https://www.spinics.net/lists/linux-rt-users/msg20280.html. > Many thanks to them. > > Cc: Dan Williams <dan.j.williams@xxxxxxxxx> > Cc: Pankaj Gupta <pagupta@xxxxxxxxxx> > Cc: linux-rt-users <linux-rt-users@xxxxxxxxxxxxxxx> > Cc: linux-nvdimm <linux-nvdimm@xxxxxxxxxxxx> > Signed-off-by: Yongxin Liu <yongxin.liu@xxxxxxxxxxxxx> Looks ok to me in concept. Acked-by: Dan Williams <dan.j.williams@xxxxxxxxx>