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@xxxxxxxxx> wrote: > Hi.. > > On Wed, Mar 16, 2011 at 08:40, va stg2010 <va.storage2010@xxxxxxxxx> 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 > _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies