Re: linux-next: Tree for Jun 28 [ BISECTED: rsyslog/imklog: High CPU usage ]
From: Sedat Dilek <hidden>
Date: 2013-06-30 21:49:30
Also in:
lkml
On Sun, Jun 30, 2013 at 8:19 PM, Oleg Nesterov [off-list ref] wrote:
Andrew, please drop these wait-introduce-wait_event_commonwq-condition-state-timeout.patch wait-introduce-prepare_to_wait_event.patch patches again. I'll send v3 although it really looks like I should never try to touch wait.h. On 06/29, Sedat Dilek wrote:quoted
As this all did not show me what caused the problem I started a git-bisect session. This revealed the following culprit commit: commit bb1f30cb7d3ba21098f0ee7e0382160ba2599a43 "wait: introduce wait_event_common(wq, condition, state, timeout)"Heh. First of all, I am really sorry. Not only "__wait_no_timeout(tout) ?:" was wrong, I didn't bother to recheck this logic even after I got the "warning: the omitted middle operand in ?:" reports. Sedat, thanks you very much! Any chance you can try the patch below?
Thanks for the quick fix! No worries. Good we catched the issue, now. Yupp, the patch fixes the issue here. Please, send a patch against reported tree (here: next-20130628) next time. ( Attached is the one which applied here. ) I have zero clue about that "tout-tout" and "?" but you should keep coding-style within your patch? ... + __ret = __wait_no_timeout(tout) ? 0 : \ + (__tout ?: 1); \ <--- ((__tout) ?: 1) like below ((tout) ?: 1) ... + __ret = __wait_no_timeout(tout) ? 0 : ((tout) ?: 1); \ Feel free to give credits :-). - Sedat -
quoted hunk ↗ jump to hunk
Oleg.--- a/include/linux/wait.h +++ b/include/linux/wait.h@@ -191,12 +191,8 @@ wait_queue_head_t *bit_waitqueue(void *, int); for (;;) { \ __ret = prepare_to_wait_event(&wq, &__wait, state); \ if (condition) { \ - __ret = __wait_no_timeout(tout); \ - if (!__ret) { \ - __ret = __tout; \ - if (!__ret) \ - __ret = 1; \ - } \ + __ret = __wait_no_timeout(tout) ? 0 : \ + (__tout ?: 1); \ break; \ } \ \@@ -217,16 +213,10 @@ wait_queue_head_t *bit_waitqueue(void *, int); #define wait_event_common(wq, condition, state, tout) \ ({ \ long __ret; \ - if (condition) { \ - __ret = __wait_no_timeout(tout); \ - if (!__ret) { \ - __ret = tout; \ - if (!__ret) \ - __ret = 1; \ - } \ - } else { \ + if (condition) \ + __ret = __wait_no_timeout(tout) ? 0 : ((tout) ?: 1); \ + else \ __ret = __wait_event_common(wq, condition, state, tout);\ - } \ __ret; \ })
Attachments
- 3.10.0-rc7-next20130628-10-iniza-small.patch [application/octet-stream] 7236 bytes · preview