@@ -434,6 +434,7 @@ struct ipmi_smi {
434434 atomic_t nr_users ;
435435 struct device_attribute nr_users_devattr ;
436436 struct device_attribute nr_msgs_devattr ;
437+ struct device_attribute maintenance_mode_devattr ;
437438
438439
439440 /* Used for wake ups at startup. */
@@ -3521,6 +3522,19 @@ static ssize_t nr_msgs_show(struct device *dev,
35213522}
35223523static DEVICE_ATTR_RO (nr_msgs );
35233524
3525+ static ssize_t maintenance_mode_show (struct device * dev ,
3526+ struct device_attribute * attr ,
3527+ char * buf )
3528+ {
3529+ struct ipmi_smi * intf = container_of (attr ,
3530+ struct ipmi_smi ,
3531+ maintenance_mode_devattr );
3532+
3533+ return sysfs_emit (buf , "%u %d\n" , intf -> maintenance_mode_state ,
3534+ intf -> auto_maintenance_timeout );
3535+ }
3536+ static DEVICE_ATTR_RO (maintenance_mode );
3537+
35243538static void redo_bmc_reg (struct work_struct * work )
35253539{
35263540 struct ipmi_smi * intf = container_of (work , struct ipmi_smi ,
@@ -3657,6 +3671,14 @@ int ipmi_add_smi(struct module *owner,
36573671 goto out_err_bmc_reg ;
36583672 }
36593673
3674+ intf -> maintenance_mode_devattr = dev_attr_maintenance_mode ;
3675+ sysfs_attr_init (& intf -> maintenance_mode_devattr .attr );
3676+ rv = device_create_file (intf -> si_dev , & intf -> maintenance_mode_devattr );
3677+ if (rv ) {
3678+ device_remove_file (intf -> si_dev , & intf -> nr_users_devattr );
3679+ goto out_err_bmc_reg ;
3680+ }
3681+
36603682 intf -> intf_num = i ;
36613683 mutex_unlock (& ipmi_interfaces_mutex );
36623684
@@ -3764,6 +3786,7 @@ void ipmi_unregister_smi(struct ipmi_smi *intf)
37643786 if (intf -> handlers -> shutdown )
37653787 intf -> handlers -> shutdown (intf -> send_info );
37663788
3789+ device_remove_file (intf -> si_dev , & intf -> maintenance_mode_devattr );
37673790 device_remove_file (intf -> si_dev , & intf -> nr_msgs_devattr );
37683791 device_remove_file (intf -> si_dev , & intf -> nr_users_devattr );
37693792
0 commit comments