<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/arch/s390/lib/delay.c, branch v3.2.46</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>[S390] cleanup psw related bits and pieces</title>
<updated>2011-10-30T14:16:43+00:00</updated>
<author>
<name>Martin Schwidefsky</name>
<email>schwidefsky@de.ibm.com</email>
</author>
<published>2011-10-30T14:16:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=b50511e41aa51a89b4176784a670582424bc7db6'/>
<id>b50511e41aa51a89b4176784a670582424bc7db6</id>
<content type='text'>
Split out addressing mode bits from PSW_BASE_BITS, rename PSW_BASE_BITS
to PSW_MASK_BASE, get rid of psw_user32_bits, remove unused function
enabled_wait(), introduce PSW_MASK_USER, and drop PSW_MASK_MERGE macros.
Change psw_kernel_bits / psw_user_bits to contain only the bits that
are always set in the respective mode.

Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Split out addressing mode bits from PSW_BASE_BITS, rename PSW_BASE_BITS
to PSW_MASK_BASE, get rid of psw_user32_bits, remove unused function
enabled_wait(), introduce PSW_MASK_USER, and drop PSW_MASK_MERGE macros.
Change psw_kernel_bits / psw_user_bits to contain only the bits that
are always set in the respective mode.

Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>[S390] delay: implement ndelay</title>
<updated>2011-05-26T07:48:25+00:00</updated>
<author>
<name>Heiko Carstens</name>
<email>heiko.carstens@de.ibm.com</email>
</author>
<published>2011-05-26T07:48:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=b396637841fff79e9520514e8dcbe769c20a2ea0'/>
<id>b396637841fff79e9520514e8dcbe769c20a2ea0</id>
<content type='text'>
Implement ndelay() on s390 as well.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Implement ndelay() on s390 as well.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>[S390] time: let local_tick_enable/disable() reprogram the clock comparator</title>
<updated>2011-01-05T11:47:25+00:00</updated>
<author>
<name>Heiko Carstens</name>
<email>heiko.carstens@de.ibm.com</email>
</author>
<published>2011-01-05T11:47:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=545b288dcbdea58a2ce2afba5f6a8302d31ac459'/>
<id>545b288dcbdea58a2ce2afba5f6a8302d31ac459</id>
<content type='text'>
Let local_tick_enable/disable() reprogram the clock comparator so the
function names make semantically more sense.
Also that way the functions are more symmetric since normally each
local_tick_enable() call usually would have a subsequent call to
set_clock_comparator() anyway.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Let local_tick_enable/disable() reprogram the clock comparator so the
function names make semantically more sense.
Also that way the functions are more symmetric since normally each
local_tick_enable() call usually would have a subsequent call to
set_clock_comparator() anyway.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>[S390] nmi: fix clock comparator revalidation</title>
<updated>2010-11-25T08:52:59+00:00</updated>
<author>
<name>Heiko Carstens</name>
<email>heiko.carstens@de.ibm.com</email>
</author>
<published>2010-11-25T08:52:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=e8129c642155616d9e2160a75f103e127c8c3708'/>
<id>e8129c642155616d9e2160a75f103e127c8c3708</id>
<content type='text'>
On each machine check all registers are revalidated. The save area for
the clock comparator however only contains the upper most seven bytes
of the former contents, if valid.
Therefore the machine check handler uses a store clock instruction to
get the current time and writes that to the clock comparator register
which in turn will generate an immediate timer interrupt.
However within the lowcore the expected time of the next timer
interrupt is stored. If the interrupt happens before that time the
handler won't be called. In turn the clock comparator won't be
reprogrammed and therefore the interrupt condition stays pending which
causes an interrupt loop until the expected time is reached.

On NOHZ machines this can result in unresponsive machines since the
time of the next expected interrupted can be a couple of days in the
future.

To fix this just revalidate the clock comparator register with the
expected value.
In addition the special handling for udelay must be changed as well.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
On each machine check all registers are revalidated. The save area for
the clock comparator however only contains the upper most seven bytes
of the former contents, if valid.
Therefore the machine check handler uses a store clock instruction to
get the current time and writes that to the clock comparator register
which in turn will generate an immediate timer interrupt.
However within the lowcore the expected time of the next timer
interrupt is stored. If the interrupt happens before that time the
handler won't be called. In turn the clock comparator won't be
reprogrammed and therefore the interrupt condition stays pending which
causes an interrupt loop until the expected time is reached.

On NOHZ machines this can result in unresponsive machines since the
time of the next expected interrupted can be a couple of days in the
future.

To fix this just revalidate the clock comparator register with the
expected value.
In addition the special handling for udelay must be changed as well.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>[S390] Provide arch specific mdelay implementation.</title>
<updated>2009-10-06T08:35:08+00:00</updated>
<author>
<name>Heiko Carstens</name>
<email>heiko.carstens@de.ibm.com</email>
</author>
<published>2009-10-06T08:34:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=0cd6a403e8f86bb24975e4c16ce640a063475515'/>
<id>0cd6a403e8f86bb24975e4c16ce640a063475515</id>
<content type='text'>
Use an own implementation instead of the common code udelay loop.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Use an own implementation instead of the common code udelay loop.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>[S390] Fix enabled udelay for short delays.</title>
<updated>2009-10-06T08:35:08+00:00</updated>
<author>
<name>Christian Borntraeger</name>
<email>borntraeger@de.ibm.com</email>
</author>
<published>2009-10-06T08:34:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=78d81f2f844b739b377817cfd279fb6067e191a7'/>
<id>78d81f2f844b739b377817cfd279fb6067e191a7</id>
<content type='text'>
When udelay() gets called with a delay that would expire before the
next clock event it reprograms the clock comparator.
When the interrupt happens the clock comparator won't be resetted
therefore the interrupt condition doesn't get cleared.
The result is an endless timer interrupt loop until the next clock
event would expire (stored in lowcore).
So udelay() usually would wait much longer for small delays than it
should.

Fix this by disabling the local tick which makes sure that the clock
comparator will be resetted when a timer interrupt happens.

Signed-off-by: Christian Borntraeger &lt;borntraeger@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When udelay() gets called with a delay that would expire before the
next clock event it reprograms the clock comparator.
When the interrupt happens the clock comparator won't be resetted
therefore the interrupt condition doesn't get cleared.
The result is an endless timer interrupt loop until the next clock
event would expire (stored in lowcore).
So udelay() usually would wait much longer for small delays than it
should.

Fix this by disabling the local tick which makes sure that the clock
comparator will be resetted when a timer interrupt happens.

Signed-off-by: Christian Borntraeger &lt;borntraeger@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>[S390] udelay: disable lockdep to avoid false positives</title>
<updated>2009-07-07T14:37:51+00:00</updated>
<author>
<name>Heiko Carstens</name>
<email>heiko.carstens@de.ibm.com</email>
</author>
<published>2009-07-07T14:37:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=bb8c29caffdda55d3df0315ff2485f7df7290b1d'/>
<id>bb8c29caffdda55d3df0315ff2485f7df7290b1d</id>
<content type='text'>
Our udelay implementation enables interrupts to receive a special timer
interrupt regardless of the context it is called from.
This might lead to false positive lockdep reports. Since lockdep isn't
aware of the fact that only a single interrupt source is enabled it
warns about possible deadlocks that in reality won't happen, like
the one below.
To fix this disable lockdep before enabling interrupts.

[ 254.040888] =================================
[ 254.040904] [ INFO: inconsistent lock state ]
[ 254.040910] 2.6.30 #9
[ 254.040914] ---------------------------------
[ 254.040920] inconsistent {IN-HARDIRQ-W} -&gt; {HARDIRQ-ON-W} usage.
[ 254.040927] swapper/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
[ 254.040934] (sch-&gt;lock){?.-...}, at: [&lt;00000000002e4778&gt;] ccw_device_timeout+0x48/0x2f0
[ 254.040961] {IN-HARDIRQ-W} state was registered at:
[ 254.040969] [&lt;0000000000096f74&gt;] __lock_acquire+0x9d4/0x188c
[ 254.040985] [&lt;0000000000097f68&gt;] lock_acquire+0x13c/0x16c
[ 254.040998] [&lt;00000000004527e0&gt;] _spin_lock+0x74/0xb8
[ 254.041016] [&lt;0000000000457eb2&gt;] do_IRQ+0xde/0x208
[ 254.041031] [&lt;000000000002d190&gt;] io_return+0x0/0x8
[ 254.041049] [&lt;0000000000029faa&gt;] vtime_stop_cpu+0xbe/0x114
[ 254.041066] irq event stamp: 259629
[ 254.041076] hardirqs last enabled at (259628): [&lt;000000000045238e&gt;] _spin_unlock_irq+0x5e/0x9c
[ 254.041095] hardirqs last disabled at (259629): [&lt;000000000045292e&gt;] _spin_lock_irq+0x4a/0xc4
[ 254.041126] softirqs last enabled at (259614): [&lt;000000000006500e&gt;] __do_softirq+0x296/0x2b0
[ 254.041137] softirqs last disabled at (259619): [&lt;0000000000024cf6&gt;] do_softirq+0x102/0x108
[ 254.041147]
[ 254.041148] other info that might help us debug this:
[ 254.041153] 2 locks held by swapper/0:
[ 254.041157] #0: (&amp;priv-&gt;timer){+.-...}, at: [&lt;000000000006bf9a&gt;] run_timer_softirq+0x19a/0x340
[ 254.041170] #1: (sch-&gt;lock){?.-...}, at: [&lt;00000000002e4778&gt;] ccw_device_timeout+0x48/0x2f0
[ 254.041182]
[ 254.041310] Call Trace:
[ 254.041313] ([&lt;00000000000174fc&gt;] show_trace+0x16c/0x170)
[ 254.041321] [&lt;0000000000017578&gt;] show_stack+0x78/0x104
[ 254.041327] [&lt;000000000044d0ca&gt;] dump_stack+0xc6/0xd4
[ 254.041342] [&lt;00000000000949b4&gt;] print_usage_bug+0x1c8/0x1fc
[ 254.041353] [&lt;0000000000094e8a&gt;] mark_lock+0x4a2/0x670
[ 254.041364] [&lt;00000000000950e2&gt;] mark_held_locks+0x8a/0xb4
[ 254.041375] [&lt;0000000000095398&gt;] trace_hardirqs_on_caller+0x74/0x1ac
[ 254.041388] [&lt;00000000000954fa&gt;] trace_hardirqs_on+0x2a/0x38
[ 254.041402] [&lt;000000000025f1ec&gt;] __udelay_disabled+0xac/0xfc
[ 254.041419] [&lt;000000000025f432&gt;] __udelay+0x12a/0x148
[ 254.041433] [&lt;00000000002d64d8&gt;] cio_commit_config+0x170/0x290
[ 254.041451] [&lt;00000000002d6978&gt;] cio_disable_subchannel+0x120/0x1cc
[ 254.041468] [&lt;00000000002e32a4&gt;] ccw_device_recog_done+0x54/0x2f4
[ 254.041485] [&lt;00000000002e3638&gt;] ccw_device_sense_id_done+0x50/0x90
[ 254.041508] [&lt;00000000002e615a&gt;] snsid_callback+0xfa/0x3a8
[ 254.041515] [&lt;00000000002dd96c&gt;] ccwreq_stop+0x80/0x90
[ 254.041523] [&lt;00000000002dda8e&gt;] ccw_request_timeout+0xc2/0xd0
[ 254.041530] [&lt;00000000002e2f70&gt;] ccw_device_request_event+0x58/0x90
[ 254.041537] [&lt;00000000002e47ae&gt;] ccw_device_timeout+0x7e/0x2f0
[ 254.041555] [&lt;000000000006c02a&gt;] run_timer_softirq+0x22a/0x340
[ 254.041566] [&lt;0000000000064eb0&gt;] __do_softirq+0x138/0x2b0
[ 254.041578] [&lt;0000000000024cf6&gt;] do_softirq+0x102/0x108
[ 254.041590] [&lt;00000000000647ce&gt;] irq_exit+0xee/0x114
[ 254.041603] [&lt;0000000000457d88&gt;] do_extint+0x130/0x17c
[ 254.041617] [&lt;000000000002d41e&gt;] ext_no_vtime+0x1e/0x22
[ 254.041631] [&lt;0000000000029faa&gt;] vtime_stop_cpu+0xbe/0x114
[ 254.041646] ([&lt;0000000000029f58&gt;] vtime_stop_cpu+0x6c/0x114)
[ 254.041662] [&lt;000000000001d842&gt;] cpu_idle+0x122/0x1c0
[ 254.041679] [&lt;00000000004482c6&gt;] start_secondary+0xce/0xe0
[ 254.041696] [&lt;0000000000000000&gt;] 0x0
[ 254.041715] [&lt;0000000000000000&gt;] 0x0
[ 254.041745] INFO: lockdep is turned off.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Our udelay implementation enables interrupts to receive a special timer
interrupt regardless of the context it is called from.
This might lead to false positive lockdep reports. Since lockdep isn't
aware of the fact that only a single interrupt source is enabled it
warns about possible deadlocks that in reality won't happen, like
the one below.
To fix this disable lockdep before enabling interrupts.

[ 254.040888] =================================
[ 254.040904] [ INFO: inconsistent lock state ]
[ 254.040910] 2.6.30 #9
[ 254.040914] ---------------------------------
[ 254.040920] inconsistent {IN-HARDIRQ-W} -&gt; {HARDIRQ-ON-W} usage.
[ 254.040927] swapper/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
[ 254.040934] (sch-&gt;lock){?.-...}, at: [&lt;00000000002e4778&gt;] ccw_device_timeout+0x48/0x2f0
[ 254.040961] {IN-HARDIRQ-W} state was registered at:
[ 254.040969] [&lt;0000000000096f74&gt;] __lock_acquire+0x9d4/0x188c
[ 254.040985] [&lt;0000000000097f68&gt;] lock_acquire+0x13c/0x16c
[ 254.040998] [&lt;00000000004527e0&gt;] _spin_lock+0x74/0xb8
[ 254.041016] [&lt;0000000000457eb2&gt;] do_IRQ+0xde/0x208
[ 254.041031] [&lt;000000000002d190&gt;] io_return+0x0/0x8
[ 254.041049] [&lt;0000000000029faa&gt;] vtime_stop_cpu+0xbe/0x114
[ 254.041066] irq event stamp: 259629
[ 254.041076] hardirqs last enabled at (259628): [&lt;000000000045238e&gt;] _spin_unlock_irq+0x5e/0x9c
[ 254.041095] hardirqs last disabled at (259629): [&lt;000000000045292e&gt;] _spin_lock_irq+0x4a/0xc4
[ 254.041126] softirqs last enabled at (259614): [&lt;000000000006500e&gt;] __do_softirq+0x296/0x2b0
[ 254.041137] softirqs last disabled at (259619): [&lt;0000000000024cf6&gt;] do_softirq+0x102/0x108
[ 254.041147]
[ 254.041148] other info that might help us debug this:
[ 254.041153] 2 locks held by swapper/0:
[ 254.041157] #0: (&amp;priv-&gt;timer){+.-...}, at: [&lt;000000000006bf9a&gt;] run_timer_softirq+0x19a/0x340
[ 254.041170] #1: (sch-&gt;lock){?.-...}, at: [&lt;00000000002e4778&gt;] ccw_device_timeout+0x48/0x2f0
[ 254.041182]
[ 254.041310] Call Trace:
[ 254.041313] ([&lt;00000000000174fc&gt;] show_trace+0x16c/0x170)
[ 254.041321] [&lt;0000000000017578&gt;] show_stack+0x78/0x104
[ 254.041327] [&lt;000000000044d0ca&gt;] dump_stack+0xc6/0xd4
[ 254.041342] [&lt;00000000000949b4&gt;] print_usage_bug+0x1c8/0x1fc
[ 254.041353] [&lt;0000000000094e8a&gt;] mark_lock+0x4a2/0x670
[ 254.041364] [&lt;00000000000950e2&gt;] mark_held_locks+0x8a/0xb4
[ 254.041375] [&lt;0000000000095398&gt;] trace_hardirqs_on_caller+0x74/0x1ac
[ 254.041388] [&lt;00000000000954fa&gt;] trace_hardirqs_on+0x2a/0x38
[ 254.041402] [&lt;000000000025f1ec&gt;] __udelay_disabled+0xac/0xfc
[ 254.041419] [&lt;000000000025f432&gt;] __udelay+0x12a/0x148
[ 254.041433] [&lt;00000000002d64d8&gt;] cio_commit_config+0x170/0x290
[ 254.041451] [&lt;00000000002d6978&gt;] cio_disable_subchannel+0x120/0x1cc
[ 254.041468] [&lt;00000000002e32a4&gt;] ccw_device_recog_done+0x54/0x2f4
[ 254.041485] [&lt;00000000002e3638&gt;] ccw_device_sense_id_done+0x50/0x90
[ 254.041508] [&lt;00000000002e615a&gt;] snsid_callback+0xfa/0x3a8
[ 254.041515] [&lt;00000000002dd96c&gt;] ccwreq_stop+0x80/0x90
[ 254.041523] [&lt;00000000002dda8e&gt;] ccw_request_timeout+0xc2/0xd0
[ 254.041530] [&lt;00000000002e2f70&gt;] ccw_device_request_event+0x58/0x90
[ 254.041537] [&lt;00000000002e47ae&gt;] ccw_device_timeout+0x7e/0x2f0
[ 254.041555] [&lt;000000000006c02a&gt;] run_timer_softirq+0x22a/0x340
[ 254.041566] [&lt;0000000000064eb0&gt;] __do_softirq+0x138/0x2b0
[ 254.041578] [&lt;0000000000024cf6&gt;] do_softirq+0x102/0x108
[ 254.041590] [&lt;00000000000647ce&gt;] irq_exit+0xee/0x114
[ 254.041603] [&lt;0000000000457d88&gt;] do_extint+0x130/0x17c
[ 254.041617] [&lt;000000000002d41e&gt;] ext_no_vtime+0x1e/0x22
[ 254.041631] [&lt;0000000000029faa&gt;] vtime_stop_cpu+0xbe/0x114
[ 254.041646] ([&lt;0000000000029f58&gt;] vtime_stop_cpu+0x6c/0x114)
[ 254.041662] [&lt;000000000001d842&gt;] cpu_idle+0x122/0x1c0
[ 254.041679] [&lt;00000000004482c6&gt;] start_secondary+0xce/0xe0
[ 254.041696] [&lt;0000000000000000&gt;] 0x0
[ 254.041715] [&lt;0000000000000000&gt;] 0x0
[ 254.041745] INFO: lockdep is turned off.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>[S390] move EXPORT_SYMBOLs to definitions</title>
<updated>2009-03-26T14:24:11+00:00</updated>
<author>
<name>Heiko Carstens</name>
<email>heiko.carstens@de.ibm.com</email>
</author>
<published>2009-03-26T14:24:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=1485c5c88483d200c9c4c71ed7e8eef1a1e317a1'/>
<id>1485c5c88483d200c9c4c71ed7e8eef1a1e317a1</id>
<content type='text'>
Move all EXPORT_SYMBOLs to their corresponding definitions.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Move all EXPORT_SYMBOLs to their corresponding definitions.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>[S390] Move private simple udelay function to arch/s390/lib/delay.c.</title>
<updated>2008-10-10T19:33:58+00:00</updated>
<author>
<name>Heiko Carstens</name>
<email>heiko.carstens@de.ibm.com</email>
</author>
<published>2008-10-10T19:33:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=5a0d0e65379256b4da2c9092e197a2c761f51c01'/>
<id>5a0d0e65379256b4da2c9092e197a2c761f51c01</id>
<content type='text'>
Move cio's private simple udelay function to lib/delay.c and turn it
into something much more readable. So we have all implementations
at one place.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Move cio's private simple udelay function to lib/delay.c and turn it
into something much more readable. So we have all implementations
at one place.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>[S390] nohz: Fix __udelay.</title>
<updated>2008-10-03T19:55:54+00:00</updated>
<author>
<name>Heiko Carstens</name>
<email>heiko.carstens@de.ibm.com</email>
</author>
<published>2008-10-03T19:54:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=d3d238c7744d08c36a114a59cb537d4c0c6c9a86'/>
<id>d3d238c7744d08c36a114a59cb537d4c0c6c9a86</id>
<content type='text'>
This fixes a regression that came with 934b2857cc576ae53c92a66e63fce7ddcfa74691
("[S390] nohz/sclp: disable timer on synchronous waits.").
If udelay() gets called from a disabled context it sets the clock comparator
to a value where it expects the next interrupt. When the interrupt happens
the clock comparator gets not reset and therefore the interrupt condition
doesn't get cleared. The result is an endless timer interrupt loop.

In addition this patch fixes also the following:

rcutorture reveals that our __udelay implementation is still buggy,
since it might schedule tasklets, but prevents their execution:

NOHZ: local_softirq_pending 42
NOHZ: local_softirq_pending 02
NOHZ: local_softirq_pending 142
NOHZ: local_softirq_pending 02

To fix this we make sure that only the clock comparator interrupt
is enabled when the enabled wait psw is loaded.
Also no code gets called anymore which might schedule tasklets.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This fixes a regression that came with 934b2857cc576ae53c92a66e63fce7ddcfa74691
("[S390] nohz/sclp: disable timer on synchronous waits.").
If udelay() gets called from a disabled context it sets the clock comparator
to a value where it expects the next interrupt. When the interrupt happens
the clock comparator gets not reset and therefore the interrupt condition
doesn't get cleared. The result is an endless timer interrupt loop.

In addition this patch fixes also the following:

rcutorture reveals that our __udelay implementation is still buggy,
since it might schedule tasklets, but prevents their execution:

NOHZ: local_softirq_pending 42
NOHZ: local_softirq_pending 02
NOHZ: local_softirq_pending 142
NOHZ: local_softirq_pending 02

To fix this we make sure that only the clock comparator interrupt
is enabled when the enabled wait psw is loaded.
Also no code gets called anymore which might schedule tasklets.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Martin Schwidefsky &lt;schwidefsky@de.ibm.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
