diff options
-rw-r--r-- | drivers/base/firmware_class.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c index b44ed35ac38d..be5f7aae75fc 100644 --- a/drivers/base/firmware_class.c +++ b/drivers/base/firmware_class.c | |||
@@ -246,7 +246,6 @@ static void __fw_free_buf(struct kref *ref) | |||
246 | __func__, buf->fw_id, buf, buf->data, | 246 | __func__, buf->fw_id, buf, buf->data, |
247 | (unsigned int)buf->size); | 247 | (unsigned int)buf->size); |
248 | 248 | ||
249 | spin_lock(&fwc->lock); | ||
250 | list_del(&buf->list); | 249 | list_del(&buf->list); |
251 | spin_unlock(&fwc->lock); | 250 | spin_unlock(&fwc->lock); |
252 | 251 | ||
@@ -263,7 +262,10 @@ static void __fw_free_buf(struct kref *ref) | |||
263 | 262 | ||
264 | static void fw_free_buf(struct firmware_buf *buf) | 263 | static void fw_free_buf(struct firmware_buf *buf) |
265 | { | 264 | { |
266 | kref_put(&buf->ref, __fw_free_buf); | 265 | struct firmware_cache *fwc = buf->fwc; |
266 | spin_lock(&fwc->lock); | ||
267 | if (!kref_put(&buf->ref, __fw_free_buf)) | ||
268 | spin_unlock(&fwc->lock); | ||
267 | } | 269 | } |
268 | 270 | ||
269 | /* direct firmware loading support */ | 271 | /* direct firmware loading support */ |