diff --git a/dsp/adsprpc.c b/dsp/adsprpc.c index f18a42f724..4158910824 100644 --- a/dsp/adsprpc.c +++ b/dsp/adsprpc.c @@ -8508,32 +8508,33 @@ static struct device fastrpc_bus = { static int fastrpc_bus_match(struct device *dev, struct device_driver *driver) { + struct fastrpc_apps *me = &gfa; struct fastrpc_driver *frpc_driver = to_fastrpc_driver(driver); struct fastrpc_device *frpc_device = to_fastrpc_device(dev); + unsigned long irq_flags = 0; - if (frpc_device->handle == frpc_driver->handle) + if (frpc_device->handle == frpc_driver->handle) { + spin_lock_irqsave(&me->hlock, irq_flags); + /* If device is being closed, fail the match */ + if (frpc_device->dev_close) { + spin_unlock_irqrestore(&me->hlock, irq_flags); + return 0; + } + frpc_device->refs++; + frpc_driver->device = dev; + spin_unlock_irqrestore(&me->hlock, irq_flags); return 1; + } return 0; } static int fastrpc_bus_probe(struct device *dev) { - struct fastrpc_apps *me = &gfa; struct fastrpc_device *frpc_dev = to_fastrpc_device(dev); struct fastrpc_driver *frpc_drv = to_fastrpc_driver(dev->driver); - unsigned long irq_flags = 0; - if (frpc_drv && frpc_drv->probe) { - spin_lock_irqsave(&me->hlock, irq_flags); - if (frpc_dev->dev_close) { - spin_unlock_irqrestore(&me->hlock, irq_flags); - return 0; - } - frpc_dev->refs++; - frpc_drv->device = dev; - spin_unlock_irqrestore(&me->hlock, irq_flags); + if (frpc_drv && frpc_drv->probe) return frpc_drv->probe(frpc_dev); - } return 0; }