This introduces a small helper in net/ethernet, which registers a network
notifier at core_initcall time, and accepts registrations mapping expected
asynchronously-probed network device paths (like, "usb1/1-1/1-1.1/1-1.1:1.0")
and the MAC that is needed to be assigned to the device when it appears.
The mac prefix is poor. I think eth_mac is better.
diff --git a/net/ethernet/mac-platform.c b/net/ethernet/mac-platform.c[]+static int mac_platform_netdev_event(struct notifier_block *this,
+ unsigned long event, void *ptr)
alignment to parenthesis please.
+int mac_platform_register_device_macs(const struct mac_platform *macs)[]
+{
+ next = kmalloc(sizeof(struct mac_platform), GFP_KERNEL);
+ if (!next) {
+ ret = -ENOMEM;
+ goto bail;
+ }
+
+ next->device_path = kmalloc(strlen(macs->device_path) + 1,
+ GFP_KERNEL);
+ if (!next->device_path) {
+ ret = -ENOMEM;
+ goto bail;
+ }
+
+ strcpy(next->device_path, macs->device_path);
+ memcpy(next->mac, macs->mac, sizeof macs->mac);
kmemdup and kstrdup()
+ list_add(&next->list, &mac_platform_list);
+
+ macs++;
+ }
+
+bail:
+ mutex_unlock(&mac_platform_mutex);
+
+ return ret;
+}
leaking memory on failures.