Общая память между пользовательским пространством и потоками ядра

Я разрабатываю приложение ядра, которое включает kthreads. Я создаю массив структур и выделяю память с помощью malloc в пользовательском пространстве. Затем я вызываю системный вызов (который я реализовал) и передаю адрес массива в пространство ядра. В обработчике системного вызова, который я создаю, я создаю 2 kthreads, которые будут контролировать массив. kthread может изменять некоторые значения, а потоки пользовательского пространства также могут изменять некоторые значения. Идея состоит в том, чтобы использовать массив как разделяемую память. Но иногда, когда я обращаюсь к памяти в пространстве ядра (используя copy_from_user), данные каким-то образом изменяются. Я могу убедиться, что адрес такой же, когда он был назначен, и в ядре. Но при использовании copy_from_user он дает различные значения, такие как значения мусора.

Также подходит следующий оператор?

int kthread_run_function(void* data){
    struct entry tmp;
    copy_from_user(&tmp, data, sizeof(struct entry));
}
5
задан max 27 October 2011 в 03:26
поделиться