[PATCH 3/7] netdev: Pass 'netdev_class' to ->run() and ->wait().
flat view
STALE3723d
From: Mark Kavanagh <hidden>
Date: 2016-08-05 14:30:29
Subsystem:
library code, the rest · Maintainers:
Andrew Morton, Linus Torvalds
From: Daniele Di Proietto <redacted> This will allow run() and wait() methods to be shared between different classes and still perform class-specific work. Signed-off-by: Daniele Di Proietto <redacted> --- lib/netdev-bsd.c | 6 +++--- lib/netdev-dummy.c | 4 ++-- lib/netdev-linux.c | 6 +++--- lib/netdev-provider.h | 14 ++++++++++---- lib/netdev-vport.c | 4 ++-- lib/netdev.c | 4 ++-- 6 files changed, 22 insertions(+), 16 deletions(-)
diff --git a/lib/netdev-bsd.c b/lib/netdev-bsd.c
index 2bba0ed..75a330b 100644
--- a/lib/netdev-bsd.c
+++ b/lib/netdev-bsd.c@@ -146,7 +146,7 @@ static void ifr_set_flags(struct ifreq *, int flags); static int af_link_ioctl(unsigned long command, const void *arg); #endif -static void netdev_bsd_run(void); +static void netdev_bsd_run(const struct netdev_class *); static int netdev_bsd_get_mtu(const struct netdev *netdev_, int *mtup); static bool
@@ -180,7 +180,7 @@ netdev_get_kernel_name(const struct netdev *netdev) * interface status changes, and eventually calls all the user callbacks. */ static void -netdev_bsd_run(void) +netdev_bsd_run(const struct netdev_class *netdev_class OVS_UNUSED) { rtbsd_notifier_run(); }
@@ -190,7 +190,7 @@ netdev_bsd_run(void) * be called. */ static void -netdev_bsd_wait(void) +netdev_bsd_wait(const struct netdev_class *netdev_class OVS_UNUSED) { rtbsd_notifier_wait(); }
diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c
index a950409..2a6aa56 100644
--- a/lib/netdev-dummy.c
+++ b/lib/netdev-dummy.c@@ -622,7 +622,7 @@ dummy_netdev_get_conn_state(struct dummy_packet_conn *conn) } static void -netdev_dummy_run(void) +netdev_dummy_run(const struct netdev_class *netdev_class OVS_UNUSED) { struct netdev_dummy *dev;
@@ -636,7 +636,7 @@ netdev_dummy_run(void) } static void -netdev_dummy_wait(void) +netdev_dummy_wait(const struct netdev_class *netdev_class OVS_UNUSED) { struct netdev_dummy *dev;
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
index fa37bcf..1b5f7c1 100644
--- a/lib/netdev-linux.c
+++ b/lib/netdev-linux.c@@ -526,7 +526,7 @@ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); * changes in the device miimon status, so we can use atomic_count. */ static atomic_count miimon_cnt = ATOMIC_COUNT_INIT(0); -static void netdev_linux_run(void); +static void netdev_linux_run(const struct netdev_class *); static int netdev_linux_do_ethtool(const char *name, struct ethtool_cmd *, int cmd, const char *cmd_name);
@@ -623,7 +623,7 @@ netdev_linux_miimon_enabled(void) } static void -netdev_linux_run(void) +netdev_linux_run(const struct netdev_class *netdev_class OVS_UNUSED) { struct nl_sock *sock; int error;
@@ -697,7 +697,7 @@ netdev_linux_run(void) } static void -netdev_linux_wait(void) +netdev_linux_wait(const struct netdev_class *netdev_class OVS_UNUSED) { struct nl_sock *sock;
diff --git a/lib/netdev-provider.h b/lib/netdev-provider.h
index ae390cb..5bcfeba 100644
--- a/lib/netdev-provider.h
+++ b/lib/netdev-provider.h@@ -236,15 +236,21 @@ struct netdev_class { int (*init)(void); /* Performs periodic work needed by netdevs of this class. May be null if - * no periodic work is necessary. */ - void (*run)(void); + * no periodic work is necessary. + * + * 'netdev_class' points to the class. It is useful in case the same + * function is used to implement different classes. */ + void (*run)(const struct netdev_class *netdev_class); /* Arranges for poll_block() to wake up if the "run" member function needs * to be called. Implementations are additionally required to wake * whenever something changes in any of its netdevs which would cause their * ->change_seq() function to change its result. May be null if nothing is - * needed here. */ - void (*wait)(void); + * needed here. + * + * 'netdev_class' points to the class. It is useful in case the same + * function is used to implement different classes. */ + void (*wait)(const struct netdev_class *netdev_class); /* ## ---------------- ## */ /* ## netdev Functions ## */
diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c
index 87a30f8..7eabd2c 100644
--- a/lib/netdev-vport.c
+++ b/lib/netdev-vport.c@@ -321,7 +321,7 @@ netdev_vport_update_flags(struct netdev *netdev OVS_UNUSED, } static void -netdev_vport_run(void) +netdev_vport_run(const struct netdev_class *netdev_class OVS_UNUSED) { uint64_t seq;
@@ -334,7 +334,7 @@ netdev_vport_run(void) } static void -netdev_vport_wait(void) +netdev_vport_wait(const struct netdev_class *netdev_class OVS_UNUSED) { uint64_t seq;
diff --git a/lib/netdev.c b/lib/netdev.c
index 75bf1cb..589d37c 100644
--- a/lib/netdev.c
+++ b/lib/netdev.c@@ -160,7 +160,7 @@ netdev_run(void) struct netdev_registered_class *rc; CMAP_FOR_EACH (rc, cmap_node, &netdev_classes) { if (rc->class->run) { - rc->class->run(); + rc->class->run(rc->class); } } }
@@ -178,7 +178,7 @@ netdev_wait(void) struct netdev_registered_class *rc; CMAP_FOR_EACH (rc, cmap_node, &netdev_classes) { if (rc->class->wait) { - rc->class->wait(); + rc->class->wait(rc->class); } } }
--
1.9.3