как указано в: http://www.kernel.org/doc/htmldocs/kernel-hacking.html#routines-copy эта функция "может" спать.
Итак, всегда ли мне нужно делать блокировку (например, с мьютексами) при использовании этих функций или есть исключения?
В настоящее время я работаю над модулем и видел несколько опций ядра в моей системе, но не могу их воспроизвести. У меня такое ощущение, что они уволены, потому что в настоящее время я не блокирую copy_ [to / from] _user (). Может быть, я ошибаюсь, но пахнет так, будто это как-то связано с этим.
У меня есть что-то вроде:
static unsigned char user_buffer[BUFFER_SIZE];
static ssize_t mcom_write (struct file *file, const char *buf, size_t length, loff_t *offset) {
ssize_t retval;
size_t writeCount = (length < BUFFER_SIZE) ? length : BUFFER_SIZE;
memset((void*)&user_buffer, 0x00, sizeof user_buffer);
if (copy_from_user((void*)&user_buffer, buf, writeCount)) {
retval = -EFAULT;
return retval;
}
*offset += writeCount;
retval = writeCount;
cleanupNewline(user_buffer);
dispatch(user_buffer);
return retval;
}
Это сохранение, чтобы сделать это, или мне нужно заблокировать его от других обращений, пока copy_from_user работает?
Это символьное устройство, с которого я читаю и пишу, и если в сети получен специальный пакет, то может быть одновременный доступ к этому буферу.