Sure, I'm CCing this message to the kjp mailing list so that volunteers can
work on this.
> 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
-
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/