From f1d657897f1a76e6854eb67913e00b22c9156278 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Fri, 21 May 2004 23:39:53 -0700 Subject: [PATCH] [BRIDGE]: Expose timer_residue function for use by sysfs. Move the local function timer_residue to br_timer_value so it can be used by both ioctl and sysfs code. --- net/bridge/br_ioctl.c | 21 +++++++-------------- net/bridge/br_private.h | 1 + net/bridge/br_stp_timer.c | 8 ++++++++ 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/net/bridge/br_ioctl.c b/net/bridge/br_ioctl.c index b5e47d4567af6..d3311b279fa46 100644 --- a/net/bridge/br_ioctl.c +++ b/net/bridge/br_ioctl.c @@ -20,13 +20,6 @@ #include #include "br_private.h" -/* Report time remaining in user HZ */ -static unsigned long timer_residue(const struct timer_list *timer) -{ - return timer_pending(timer) - ? jiffies_to_clock_t(timer->expires - jiffies) : 0; -} - /* called with RTNL */ static int get_bridge_ifindices(int *indices, int num) { @@ -139,10 +132,10 @@ int br_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) b.root_port = br->root_port; b.stp_enabled = br->stp_enabled; b.ageing_time = jiffies_to_clock_t(br->ageing_time); - b.hello_timer_value = timer_residue(&br->hello_timer); - b.tcn_timer_value = timer_residue(&br->tcn_timer); - b.topology_change_timer_value = timer_residue(&br->topology_change_timer); - b.gc_timer_value = timer_residue(&br->gc_timer); + b.hello_timer_value = br_timer_value(&br->hello_timer); + b.tcn_timer_value = br_timer_value(&br->tcn_timer); + b.topology_change_timer_value = br_timer_value(&br->topology_change_timer); + b.gc_timer_value = br_timer_value(&br->gc_timer); rcu_read_unlock(); if (copy_to_user((void *)args[1], &b, sizeof(b))) @@ -237,9 +230,9 @@ int br_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) p.state = pt->state; p.top_change_ack = pt->topology_change_ack; p.config_pending = pt->config_pending; - p.message_age_timer_value = timer_residue(&pt->message_age_timer); - p.forward_delay_timer_value = timer_residue(&pt->forward_delay_timer); - p.hold_timer_value = timer_residue(&pt->hold_timer); + p.message_age_timer_value = br_timer_value(&pt->message_age_timer); + p.forward_delay_timer_value = br_timer_value(&pt->forward_delay_timer); + p.hold_timer_value = br_timer_value(&pt->hold_timer); rcu_read_unlock(); diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index c9f68d13a0db7..e2cbae3ec0557 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h @@ -205,5 +205,6 @@ extern int br_stp_handle_bpdu(struct sk_buff *skb); /* br_stp_timer.c */ extern void br_stp_timer_init(struct net_bridge *br); extern void br_stp_port_timer_init(struct net_bridge_port *p); +extern unsigned long br_timer_value(const struct timer_list *timer); #endif diff --git a/net/bridge/br_stp_timer.c b/net/bridge/br_stp_timer.c index 1f4983054b3af..9bef55f564253 100644 --- a/net/bridge/br_stp_timer.c +++ b/net/bridge/br_stp_timer.c @@ -14,6 +14,7 @@ */ #include +#include #include #include "br_private.h" @@ -178,3 +179,10 @@ void br_stp_port_timer_init(struct net_bridge_port *p) br_timer_init(&p->hold_timer, br_hold_timer_expired, (unsigned long) p); } + +/* Report ticks left (in USER_HZ) used for API */ +unsigned long br_timer_value(const struct timer_list *timer) +{ + return timer_pending(timer) + ? jiffies_to_clock_t(timer->expires - jiffies) : 0; +} -- 2.53.0