Может ли кто-нибудь помочь мне в понимании разницы между «DECLARE_COMPLETION_ONSTACK» и static (DECLARE_COMPLETION (comp)) или динамической инициализацией?Функция DECLARE_COMPLETION_ONSTACK в ядре linux
Я нашел некоторые ссылки, как показано ниже (http://lxr.free-electrons.com/source/drivers/spi/spidev.c#L110):
110 spidev_sync(struct spidev_data *spidev, struct spi_message *message)
111 {
112 DECLARE_COMPLETION_ONSTACK(done);
113 int status;
114
115 message->complete = spidev_complete;
116 message->context = &done;
117
118 spin_lock_irq(&spidev->spi_lock);
119 if (spidev->spi == NULL)
120 status = -ESHUTDOWN;
121 else
122 status = spi_async(spidev->spi, message);
123 spin_unlock_irq(&spidev->spi_lock);
124
125 if (status == 0) {
126 wait_for_completion(&done);
127 status = message->status;
128 if (status == 0)
129 status = message->actual_length;
130 }
131 return status;
132 }
Выглядит как здесь его ожидания до spi_sync() функция будет завершена, у меня есть несколько запросов в понимании функции выше
2: это значит, эта функция не очень Параллельное? (так как эта переменная завершающие навязывает вид сериализации)
BR, & Шридхару