<div dir="auto"><div><br><div class="gmail_extra"><br><div class="gmail_quote">On 31-Jan-2018 11:36 PM, "Saket Sinha" <<a href="mailto:saket.sinha89@gmail.com">saket.sinha89@gmail.com</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="quoted-text">><br>
>> However, I am using this in kthreads and I want to protect it without<br>
>> using mutex/spilock.<br>
>> Apart from protecting it with spinlock or mutex, is their anyway to<br>
>> mark this dma buffer as read-only so that other threads(after<br>
>> concerned thread has accessed it) cannot access the dma buffer.<br>
><br>
> Basic locking theory states that if one section of code is already using one<br>
> type of locking primitive, and you want a lock on the resource, you need to<br>
> use the same type of lock, and the same instance.<br>
><br></div></blockquote></div></div></div><div dir="auto">I just love this above sentence, well put in a general sense, Valdis.</div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="quoted-text">
> In other words, you need to use a spinlock on dma_spin_lock as well, or<br>
> things *will* fail (and when it's a DMA controller in question, the failure will<br>
> almost certainly be spectacular).  So using a mutex is probably out of<br>
> the question.<br>
><br>
> Have you considered restructuring your code so a spinlock is usable?<br>
><br>
<br>
</div>Thanks Valdis for the prompt reply.<br>
<br>
I would go ahead and check if spinlock could work instead of mutex<br>
which I am currently using.<br>
<br>
However, let me also explain the context how I am using mutex by below<br>
pseudo code-<br>
<br>
<br>
MUTEX_INIT(dma_lock);<br>
<br>
void dummy_worker_thread()<br>
{<br>
...................<br>
mutex_lock(&dma_lock)<br>
CHECK_BIT(hw_register, nth_bit);<br>
mutex_unlock(&dma_lock);<br>
....................<br>
}<br>
<br>
Lets suppose the nth_bit is set in hw_register every X ms.<br>
<br>
Do you think spinlock will be more advantageous here than mutex ?<br></blockquote></div></div></div><div dir="auto">See basic difference between mutex and spinlock is, the former puts the thread waiting on the lock to sleep and later does a busy wait.</div><div dir="auto"><br></div><div dir="auto">Since the nth bit is set every X ms, I think sleeping and waking up would turn out to be costly operations/overhead so no mutex. Spinlock would be good enough here.</div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
Note: I am on ARMv8 SMP system using kernel version 4.4 .<br>
<br>
<br>
Regards,<br>
Saket Sinha<br>
<div class="elided-text"><br>
<br>
Regards,<br>
Saket Sinha<br>
<br>
______________________________<wbr>_________________<br>
Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.<wbr>org</a><br>
<a href="https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" rel="noreferrer" target="_blank">https://lists.kernelnewbies.<wbr>org/mailman/listinfo/<wbr>kernelnewbies</a><br>
</div></blockquote></div><br></div><div class="gmail_extra" dir="auto">- Rohan</div></div></div>