@@ -97,6 +97,8 @@ new_port_store(struct device *dev, struct device_attribute *attr,
97
97
const char * buf , size_t count )
98
98
{
99
99
struct nsim_bus_dev * nsim_bus_dev = to_nsim_bus_dev (dev );
100
+ struct nsim_dev * nsim_dev = dev_get_drvdata (dev );
101
+ struct devlink * devlink ;
100
102
unsigned int port_index ;
101
103
int ret ;
102
104
@@ -106,7 +108,14 @@ new_port_store(struct device *dev, struct device_attribute *attr,
106
108
ret = kstrtouint (buf , 0 , & port_index );
107
109
if (ret )
108
110
return ret ;
111
+
112
+ devlink = priv_to_devlink (nsim_dev );
113
+
114
+ mutex_lock (& nsim_bus_dev -> nsim_bus_reload_lock );
115
+ devlink_reload_disable (devlink );
109
116
ret = nsim_dev_port_add (nsim_bus_dev , port_index );
117
+ devlink_reload_enable (devlink );
118
+ mutex_unlock (& nsim_bus_dev -> nsim_bus_reload_lock );
110
119
return ret ? ret : count ;
111
120
}
112
121
@@ -117,6 +126,8 @@ del_port_store(struct device *dev, struct device_attribute *attr,
117
126
const char * buf , size_t count )
118
127
{
119
128
struct nsim_bus_dev * nsim_bus_dev = to_nsim_bus_dev (dev );
129
+ struct nsim_dev * nsim_dev = dev_get_drvdata (dev );
130
+ struct devlink * devlink ;
120
131
unsigned int port_index ;
121
132
int ret ;
122
133
@@ -126,7 +137,14 @@ del_port_store(struct device *dev, struct device_attribute *attr,
126
137
ret = kstrtouint (buf , 0 , & port_index );
127
138
if (ret )
128
139
return ret ;
140
+
141
+ devlink = priv_to_devlink (nsim_dev );
142
+
143
+ mutex_lock (& nsim_bus_dev -> nsim_bus_reload_lock );
144
+ devlink_reload_disable (devlink );
129
145
ret = nsim_dev_port_del (nsim_bus_dev , port_index );
146
+ devlink_reload_enable (devlink );
147
+ mutex_unlock (& nsim_bus_dev -> nsim_bus_reload_lock );
130
148
return ret ? ret : count ;
131
149
}
132
150
@@ -311,6 +329,7 @@ nsim_bus_dev_new(unsigned int id, unsigned int port_count)
311
329
nsim_bus_dev -> dev .type = & nsim_bus_dev_type ;
312
330
nsim_bus_dev -> port_count = port_count ;
313
331
nsim_bus_dev -> initial_net = current -> nsproxy -> net_ns ;
332
+ mutex_init (& nsim_bus_dev -> nsim_bus_reload_lock );
314
333
/* Disallow using nsim_bus_dev */
315
334
smp_store_release (& nsim_bus_dev -> init , false);
316
335
0 commit comments