On Mon, 2010-06-14 at 16:04 +0100, Jamie Lokier wrote: > Philby John wrote: > > mtd: Fix bug using smp_processor_id() in preemptible ubi_bgt1d kthread > > > > On a MIPS Cavium Octeon CN5020 when trying to create a UBI volume, > > on the NOR flash, the kernel thread ubi_bgt1d calls > > cfi_amdstd_write_buffers() --> do_write_buffer() --> > > INVALIDATE_CACHE_UDELAY --> __udelay(). Its __udelay() that calls > > smp_processor_id() in preemptible code, which you are not supposed to. > > Fix the problem by disabling preemption. > > The MTD code just calls udelay(). > Are you sure it isn't permitted to call udelay() from preemptible code? > I think it is fine. It isn't really udelay() but smp_processor_id() that you are not to call from a preemptible thread. Now I also see Ed Swierk has done a similar thing https://patchwork.kernel.org/patch/4049/ and he comments "..which calls smp_processor_id(), which is not supposed to be called from a preemptible thread." So perhaps I can use preempt_disable() around just this call in function __udelay()? Regards, Philby