soc: fsl: dpio: use a cpumask to identify which cpus are unused
authorIoana Ciornei <ioana.ciornei@nxp.com>
Tue, 4 Dec 2018 11:20:29 +0000 (11:20 +0000)
committerLi Yang <leoyang.li@nxp.com>
Tue, 8 Jan 2019 20:15:37 +0000 (14:15 -0600)
commit991e873223e9bcfaf10a0074eec1507c1ddfb6ab
treeee93eb8fabe6540522c803ecf925afded1246d64
parente181a569d8e52d5a5c91cf2ddc3ebcfb81163887
soc: fsl: dpio: use a cpumask to identify which cpus are unused

The current implementation of the dpio driver uses a static next_cpu
variable to keep track of the index of the next cpu available. This
approach does not handle well unbinding and binding dpio devices in a
random order. For example, unbinding a dpio and then binding it again
with the driver, will generate the below error:

$ echo dpio.5 > /sys/bus/fsl-mc/drivers/fsl_mc_dpio/unbind
$ echo dpio.5 > /sys/bus/fsl-mc/drivers/fsl_mc_dpio/bind
[  103.946380] fsl_mc_dpio dpio.5: probe failed. Number of DPIOs exceeds
NR_CPUS.
[  103.955157] fsl_mc_dpio dpio.5: fsl_mc_driver_probe failed: -34
-bash: echo: write error: No such device

Fix this error by keeping a global cpumask of unused cpus that will be
updated at every dpaa2_dpio_[probe,remove].

Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Li Yang <leoyang.li@nxp.com>
drivers/soc/fsl/dpio/dpio-driver.c
drivers/soc/fsl/dpio/dpio-service.c
include/soc/fsl/dpaa2-io.h