Re: [PATCH RT] nvdimm: make lane acquirement RT aware

From: Dan Williams
Date: Wed Mar 06 2019 - 11:35:35 EST


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>