Mulyadi, I referred to this comment. "IRQ must stay disabled till @miter@ is stopped. " Yes my operations are atomic and I set miter->flag as SG_MITER_ATOMIC when i call sg_miter_start() But from comment it seems sg_miter_stop should be called before IRQ is enabled. I also looked into sg_miter_next() and sg_miter_stop() implementations. They are calling kmap_atomic() and kunmap_atomic() respectively. Based on comment -- Is following an illegal operation? and why? 1) IRQ disabled 2) sg_miter_next , meaning kmap_atomic 3) IRQ enabled 4) IRQ disabled again little later 5) sg_miter_stop, meaning kunmap_atomic() The above sequence caused following scheduler messages (if sg_miter_stop() is moved between step1 & step3 then following error messages disappeared) :-------- BUG: scheduling while atomic: swapper/0/0xffffffff Modules linked in: my_scsi_lld Call Trace: [<ffffffff8150188c>] dump_stack+0x8/0x34 [<ffffffff815024e0>] schedule+0x4c0/0x908 BUG: scheduling while atomic: swapper/0/0x00000001 Modules linked in: my_scsi_lld Call Trace: [<ffffffff8150188c>] dump_stack+0x8/0x34 [<ffffffff815024e0>] schedule+0x4c0/0x908 [<ffffffff81134318>] cpu_idle+0x48/0x50 BUG: scheduling while atomic: swapper/0/0x00000001 Modules linked in: my_scsi_lld Call Trace: [<ffffffff8150188c>] dump_stack+0x8/0x34 [<ffffffff815024e0>] schedule+0x4c0/0x908 [<ffffffff81134318>] cpu_idle+0x48/0x50 BUG: scheduling while atomic: swapper/0/0x00000001 Modules linked in: my_scsi_lld Call Trace: [<ffffffff8150188c>] dump_stack+0x8/0x34 [<ffffffff815024e0>] schedule+0x4c0/0x908 [<ffffffff81134318>] cpu_idle+0x48/0x50 On Tue, Mar 15, 2011 at 9:50 PM, Mulyadi Santosa <mulyadi.santosa@gmail.com> wrote:
Hi..
On Wed, Mar 16, 2011 at 08:40, va stg2010 <va.storage2010@gmail.com> wrote:
Hi Can someone explain to me reason for the comment at line 332-333 of this code http://lxr.linux.no/#linux+v2.6.27.7/lib/scatterlist.c#L332
comment is: " IRQ must stay disabled till @miter@ is stopped."
OK, is this the complete comment you referred? "Context: 332 * IRQ disabled if SG_MITER_ATOMIC. IRQ must stay disabled till 333 * @miter@ is stopped. May sleep if !SG_MITER_ATOMIC."
well, then, my raw guess is, because it must be done atomically (when asked to do so). Usually, atomic operation has tight relationship with something that must be done in short time and/or must not be interrupted by interrupt handler.
Since this is talking about scatter list, I could only guess few example...perhaps in bio handling?
-- regards,
Mulyadi Santosa Freelance Linux trainer and consultant
blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com