Re[2]: [pso] tema1 linux - kmalloc in spinlock

George Adrian Drumea pso@cursuri.cs.pub.ro
Sun, 20 Mar 2005 13:06:34 +0200


> On Saturday 19 March 2005 09:53 pm, George Adrian Drumea wrote:
>> Am compilat kernelul cu optiunea de preemption si cu debug spinlocks
>> si imi da un stacktrace la kmallocul din add_list. Totusi, cred ca nu
>> exista posibilitatea unui deadlock, deoarece nu sunt in irq context...
>> Ignor eroarea?

> Corect este fie sa aloci memoria inainte de spin_lock, fie sa folosesti
> GFP_ATOMIC. Asta pentru ca nu trebuie sa faci sleep in timp ce ai un
> spinlock. In cazul de fata prima abordare e cea recomandata.

Iarasi devin teoretic :)... e corect in sensul ca asa e mai sigur ca e
bine? Intrebarea mea este daca in cazul de fata (spinlock strict in
niste hookuri de syscalls) poate aparea deadlock daca sleep? Dupa cum
vad eu, deadlock poate sa apara daca: un proces intra intr-un syscall
si face spin_lock, apoi apeleaza kmalloc si este intrerupt de un alt
proces care incearca si el spin_lock; al doilea proces se blocheaza
asteptand primul proces sa faca spin_unlock; deadlock ar fi doar daca
primul proces asteapta dintr-un motiv sau altul ca primul sa-si
termine executia, or acest lucru nu cred ca este posibil aici (sau ma
insel?); cum ar putea primul proces sa fie obligat sa astepte
terminarea executiei celui de-al doilea?

-- 
Best regards,
 George                            mailto:georgedrumea@rdslink.ro