31.03.2020 13:50, Jiada Wang пишет: > From: Sanjeev Chugh <sanjeev_chugh@xxxxxxxxxx> > > There could be scope of race conditions when sysfs is being handled > and at the same time, device removal is occurring. For example, > we don't want the device removal to begin if the Atmel device > cfg update is going on or firmware update is going on. In such > cases, wait for device update to be completed before the removal > continues. > > Thread Thread 2: > ========================= ========================= > mxt_update_fw_store() mxt_remove() > mutex_lock(&data->lock) ... > mxt_initialize() //Tries to acquire lock > request_firmware_nowait() mutex_lock(&data->lock) > ... ==>waits for lock() > ... . > ... . > mutex_unlock(&data->lock) . > //Gets lock and proceeds > mxt_free_input_device(); > ... > mutex_unlock(&data->lock) > //Frees atmel driver data > kfree(data) > > If the request_firmware_nowait() completes after the driver removal, > and callback is triggered. But kernel crashes since the module is > already removed. > > This commit adds state machine to serialize such scenarios. Won't it be easier to bump driver's module use-count by __module_get() while firmware is updating? Or remove sysfs during of mxt_remove()?