@@ -355,7 +355,9 @@ static ssize_t show_str(struct device *dev,
355
355
struct acpi_device * acpi_dev = to_acpi_device (dev );
356
356
struct acpi_power_meter_resource * resource = acpi_dev -> driver_data ;
357
357
acpi_string val ;
358
+ int ret ;
358
359
360
+ mutex_lock (& resource -> lock );
359
361
switch (attr -> index ) {
360
362
case 0 :
361
363
val = resource -> model_number ;
@@ -372,8 +374,9 @@ static ssize_t show_str(struct device *dev,
372
374
val = "" ;
373
375
break ;
374
376
}
375
-
376
- return sprintf (buf , "%s\n" , val );
377
+ ret = sprintf (buf , "%s\n" , val );
378
+ mutex_unlock (& resource -> lock );
379
+ return ret ;
377
380
}
378
381
379
382
static ssize_t show_val (struct device * dev ,
@@ -817,11 +820,12 @@ static void acpi_power_meter_notify(struct acpi_device *device, u32 event)
817
820
818
821
resource = acpi_driver_data (device );
819
822
820
- mutex_lock (& resource -> lock );
821
823
switch (event ) {
822
824
case METER_NOTIFY_CONFIG :
825
+ mutex_lock (& resource -> lock );
823
826
free_capabilities (resource );
824
827
res = read_capabilities (resource );
828
+ mutex_unlock (& resource -> lock );
825
829
if (res )
826
830
break ;
827
831
@@ -830,15 +834,12 @@ static void acpi_power_meter_notify(struct acpi_device *device, u32 event)
830
834
break ;
831
835
case METER_NOTIFY_TRIP :
832
836
sysfs_notify (& device -> dev .kobj , NULL , POWER_AVERAGE_NAME );
833
- update_meter (resource );
834
837
break ;
835
838
case METER_NOTIFY_CAP :
836
839
sysfs_notify (& device -> dev .kobj , NULL , POWER_CAP_NAME );
837
- update_cap (resource );
838
840
break ;
839
841
case METER_NOTIFY_INTERVAL :
840
842
sysfs_notify (& device -> dev .kobj , NULL , POWER_AVG_INTERVAL_NAME );
841
- update_avg_interval (resource );
842
843
break ;
843
844
case METER_NOTIFY_CAPPING :
844
845
sysfs_notify (& device -> dev .kobj , NULL , POWER_ALARM_NAME );
@@ -848,7 +849,6 @@ static void acpi_power_meter_notify(struct acpi_device *device, u32 event)
848
849
WARN (1 , "Unexpected event %d\n" , event );
849
850
break ;
850
851
}
851
- mutex_unlock (& resource -> lock );
852
852
853
853
acpi_bus_generate_netlink_event (ACPI_POWER_METER_CLASS ,
854
854
dev_name (& device -> dev ), event , 0 );
@@ -912,8 +912,8 @@ static int acpi_power_meter_remove(struct acpi_device *device)
912
912
resource = acpi_driver_data (device );
913
913
hwmon_device_unregister (resource -> hwmon_dev );
914
914
915
- free_capabilities (resource );
916
915
remove_attrs (resource );
916
+ free_capabilities (resource );
917
917
918
918
kfree (resource );
919
919
return 0 ;
0 commit comments