Some places in the network code are hairy users of jiffies values,
and it is not always clear that they are being used safely, but I
can only do my best.
Where possible, I've also moved end-time calculations outside the
loop and removed some confusing uses of "now".
Cheers, Andreas
=========================================================================
--- linux/net/core/dev.c.orig Thu Oct 25 02:55:57 2001
+++ linux/net/core/dev.c Fri Nov 2 22:47:49 2001
@@ -1407,7 +1407,7 @@
{
int this_cpu = smp_processor_id();
struct softnet_data *queue = &softnet_data[this_cpu];
- unsigned long start_time = jiffies;
+ unsigned long end_time = jiffies + 1;
int bugdet = netdev_max_backlog;
br_read_lock(BR_NETPROTO_LOCK);
@@ -1504,7 +1504,7 @@
dev_put(rx_dev);
- if (bugdet-- < 0 || jiffies - start_time > 1)
+ if (bugdet-- < 0 || time_after(jiffies, end_time))
goto softnet_break;
#ifdef CONFIG_NET_HW_FLOWCONTROL
@@ -2585,7 +2585,7 @@
int unregister_netdevice(struct net_device *dev)
{
- unsigned long now, warning_time;
+ unsigned long notify_time, warning_time;
struct net_device *d, **dp;
/* If device is running, close it first. */
@@ -2686,20 +2686,21 @@
*/
- now = warning_time = jiffies;
+ notify_time = jiffies + 1*HZ;
+ warning_time = jiffies + 10*HZ;
while (atomic_read(&dev->refcnt) != 1) {
- if ((jiffies - now) > 1*HZ) {
+ if (time_after(jiffies, notify_time)) {
/* Rebroadcast unregister notification */
notifier_call_chain(&netdev_chain, NETDEV_UNREGISTER, dev);
}
current->state = TASK_INTERRUPTIBLE;
schedule_timeout(HZ/4);
current->state = TASK_RUNNING;
- if ((jiffies - warning_time) > 10*HZ) {
- printk(KERN_EMERG "unregister_netdevice: waiting for %s to "
- "become free. Usage count = %d\n",
+ if (time_after(jiffies, warning_time)) {
+ printk(KERN_EMERG "unregister_netdevice: waiting for %s"
+ " to become free. Usage count = %d\n",
dev->name, atomic_read(&dev->refcnt));
- warning_time = jiffies;
+ warning_time = jiffies + 10*HZ;
}
}
dev_put(dev);
-- Andreas Dilger http://sourceforge.net/projects/ext2resize/ http://www-mddsp.enel.ucalgary.ca/People/adilger/- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/