Начало тупика с помощью spin_lock в ядре Linux - PullRequest
0 голосов
/ 06 сентября 2018

С кодом ниже я захожу в тупик:

void funcB()
{
    spin_lock(&my_lock);
    // do some stuff
    spin_unlock(&my_lock);
}
void funcA()
{
    spin_lock(&my_lock);
    // do some stuff
    funcB();
    // do some more
    spin_unlock(&my_lock);
}

Одним из способов решения этой проблемы является добавление новой функции с именем __funcB следующим образом:

void __funcB()
{
    // do some stuff
}
void funcB()
{
    spin_lock(&my_lock);
    __funcB();
    spin_unlock(&my_lock);
}

void funcA()
{
    spin_lock(&my_lock);
    // do some stuff
    __funcB();
    // do some more
    spin_unlock(&my_lock);
}

Мне интересно, есть ли способ вызывать spin_lock более одного раза в одном и том же контексте? Пока гуглил, наткнулся на spin_lock_nested, разве с spin_lock_nested я не получу тупик? Если spin_lock_nested будет работать, что я должен использовать в качестве подкласса?

...