slimbus: core: check get_addr before removing laddr ida
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Fri, 25 Sep 2020 09:55:18 +0000 (10:55 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 25 Sep 2020 12:41:50 +0000 (14:41 +0200)
logical address can be either assigned by the SLIMBus controller or the core.
Core uses IDA in cases where get_addr callback is not provided by the
controller.
Core already has this check while allocating IDR, however during absence
reporting this is not checked. This patch fixes this issue.

Fixes: 46a2bb5a7f7e ("slimbus: core: Add slim controllers support")
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20200925095520.27316-2-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/slimbus/core.c

index ae1e248a8fb8a5992d0c4a24e8469113eeda7d55..58b63ae0e75a631b268008fc12be8d252d71ba23 100644 (file)
@@ -326,8 +326,8 @@ void slim_report_absent(struct slim_device *sbdev)
        mutex_lock(&ctrl->lock);
        sbdev->is_laddr_valid = false;
        mutex_unlock(&ctrl->lock);
-
-       ida_simple_remove(&ctrl->laddr_ida, sbdev->laddr);
+       if (!ctrl->get_laddr)
+               ida_simple_remove(&ctrl->laddr_ida, sbdev->laddr);
        slim_device_update_status(sbdev, SLIM_DEVICE_STATUS_DOWN);
 }
 EXPORT_SYMBOL_GPL(slim_report_absent);