PM: Lock PM device list mutex in show_dev_hash()
authorJames Hogan <james@albanarts.com>
Mon, 11 Oct 2010 21:59:58 +0000 (23:59 +0200)
committerRafael J. Wysocki <rjw@sisk.pl>
Sat, 16 Oct 2010 23:57:50 +0000 (01:57 +0200)
Lock the PM device list mutex using device_pm_lock() and
device_pm_unlock() around the list iteration in show_dev_hash().

show_dev_hash() was reverse iterating dpm_list without first locking the
mutex that the functions in drivers/base/power/main.c lock. I assume
this was unintentional since there is no comment suggesting why the lock
might not be necessary.

Signed-off-by: James Hogan <james@albanarts.com>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
drivers/base/power/trace.c

index 0a1a2c4..17e24e3 100644 (file)
@@ -188,8 +188,10 @@ static int show_file_hash(unsigned int value)
 static int show_dev_hash(unsigned int value)
 {
        int match = 0;
-       struct list_head *entry = dpm_list.prev;
+       struct list_head *entry;
 
+       device_pm_lock();
+       entry = dpm_list.prev;
        while (entry != &dpm_list) {
                struct device * dev = to_device(entry);
                unsigned int hash = hash_string(DEVSEED, dev_name(dev), DEVHASH);
@@ -199,6 +201,7 @@ static int show_dev_hash(unsigned int value)
                }
                entry = entry->prev;
        }
+       device_pm_unlock();
        return match;
 }