Решайте проблемы по мере их поступления. К слову, установка семафора не гарантирует безопасность доступа при параллелизме, а лишь уменьшает практически до 0 вероятность появления коллизий.
Насколько понял, ссылка на net_device_ops вообще меняется не часто, поэтому имхо достаточно будет:
struct net_device dev;
static struct net_device_ops overwrited_netdev_ops;
...
dev->netdev_ops = &overwrited_netdev_ops;
Но вот уже сами функции операций имеют свои семафоры, читать:
https://www.kernel.org/doc/Documentation/networkin...
В догонку, так же стоит почитать сам исходник rtnetlink.c
для лучшего понимания процесса:
lxr.free-electrons.com/source/net/core/rtnetlink.c