Hallo,
bei meinem Netzwerk/SPI Linuxtreibermodul wird die Funktion die die SPI
Zugriffe ausführt von mehreren Threads aufgerufen. Mit welcher
Technologie ist es am besten sie zu schützen(Mutex/Semaphore...)? ,
heißt damit nicht gleichzeitig, sondern nacheinander zugegriffen wird?
Mein erster Anzatz:
1 | int TPS_SendRecv(u8* transmit, unsigned short length, u8* receive){
|
2 |
|
3 | struct spi_message msg;
|
4 | int ret = 0;
|
5 | int i;
|
6 | mutex_lock(&tpsmutex);
|
7 | for(i = 0; i < length; i++){
|
8 |
|
9 | struct spi_transfer t = {
|
10 | .tx_buf = transmit +i,
|
11 | .rx_buf = receive +i,
|
12 | .len = 1,
|
13 | };
|
14 |
|
15 | spi_message_init(&msg);
|
16 | spi_message_add_tail(&t, &msg);
|
17 |
|
18 | ret = spi_sync(tps->spi, &msg);
|
19 |
|
20 | gpio_set_value(HOST_SFRN, 1);
|
21 | gpio_set_value(HOST_SFRN, 0);
|
22 |
|
23 | if (ret){
|
24 | printk( "SPI transmission failed: ret = %d\n", ret);
|
25 | break;
|
26 | }
|
27 | }
|
28 | mutex_unlock(&tpsmutex);
|
29 | return 0;
|
30 | }
|
So bekommen ich bei mehrfachen Zugriff folgenden Fehler:
BUG: scheduling while atomic: dhclient
Danke für jede Hilfe