diff options
Diffstat (limited to 'kernel/relay.c')
-rw-r--r-- | kernel/relay.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/kernel/relay.c b/kernel/relay.c index 9d79b7854fa6..bc188549788f 100644 --- a/kernel/relay.c +++ b/kernel/relay.c | |||
@@ -677,9 +677,7 @@ int relay_late_setup_files(struct rchan *chan, | |||
677 | */ | 677 | */ |
678 | for_each_online_cpu(i) { | 678 | for_each_online_cpu(i) { |
679 | if (unlikely(!chan->buf[i])) { | 679 | if (unlikely(!chan->buf[i])) { |
680 | printk(KERN_ERR "relay_late_setup_files: CPU %u " | 680 | WARN_ONCE(1, KERN_ERR "CPU has no buffer!\n"); |
681 | "has no buffer, it must have!\n", i); | ||
682 | BUG(); | ||
683 | err = -EINVAL; | 681 | err = -EINVAL; |
684 | break; | 682 | break; |
685 | } | 683 | } |
@@ -750,7 +748,7 @@ size_t relay_switch_subbuf(struct rchan_buf *buf, size_t length) | |||
750 | * from the scheduler (trying to re-grab | 748 | * from the scheduler (trying to re-grab |
751 | * rq->lock), so defer it. | 749 | * rq->lock), so defer it. |
752 | */ | 750 | */ |
753 | __mod_timer(&buf->timer, jiffies + 1); | 751 | mod_timer(&buf->timer, jiffies + 1); |
754 | } | 752 | } |
755 | 753 | ||
756 | old = buf->data; | 754 | old = buf->data; |
@@ -797,13 +795,15 @@ void relay_subbufs_consumed(struct rchan *chan, | |||
797 | if (!chan) | 795 | if (!chan) |
798 | return; | 796 | return; |
799 | 797 | ||
800 | if (cpu >= NR_CPUS || !chan->buf[cpu]) | 798 | if (cpu >= NR_CPUS || !chan->buf[cpu] || |
799 | subbufs_consumed > chan->n_subbufs) | ||
801 | return; | 800 | return; |
802 | 801 | ||
803 | buf = chan->buf[cpu]; | 802 | buf = chan->buf[cpu]; |
804 | buf->subbufs_consumed += subbufs_consumed; | 803 | if (subbufs_consumed > buf->subbufs_produced - buf->subbufs_consumed) |
805 | if (buf->subbufs_consumed > buf->subbufs_produced) | ||
806 | buf->subbufs_consumed = buf->subbufs_produced; | 804 | buf->subbufs_consumed = buf->subbufs_produced; |
805 | else | ||
806 | buf->subbufs_consumed += subbufs_consumed; | ||
807 | } | 807 | } |
808 | EXPORT_SYMBOL_GPL(relay_subbufs_consumed); | 808 | EXPORT_SYMBOL_GPL(relay_subbufs_consumed); |
809 | 809 | ||