NFC: Core must test the device polling state inside the device lock

There can ever be only one call to nfc_targets_found() after polling
has been engaged. This could be from a target discovered event from
the driver, or from an error handler to notify poll will never complete.

Signed-off-by: Eric Lapuyade <eric.lapuyade@intel.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
Eric Lapuyade 2012-05-03 16:21:58 +02:00 коммит произвёл John W. Linville
Родитель a070c8591a
Коммит 8668fdd6ef
1 изменённых файлов: 7 добавлений и 2 удалений

Просмотреть файл

@ -571,13 +571,18 @@ int nfc_targets_found(struct nfc_dev *dev,
pr_debug("dev_name=%s n_targets=%d\n", dev_name(&dev->dev), n_targets); pr_debug("dev_name=%s n_targets=%d\n", dev_name(&dev->dev), n_targets);
dev->polling = false;
for (i = 0; i < n_targets; i++) for (i = 0; i < n_targets; i++)
targets[i].idx = dev->target_next_idx++; targets[i].idx = dev->target_next_idx++;
device_lock(&dev->dev); device_lock(&dev->dev);
if (dev->polling == false) {
device_unlock(&dev->dev);
return 0;
}
dev->polling = false;
dev->targets_generation++; dev->targets_generation++;
kfree(dev->targets); kfree(dev->targets);