gpt4 book ai didi

c - spinlock_t 在第一次使用时已经锁定

转载 作者:行者123 更新时间:2023-12-04 09:31:40 26 4
gpt4 key购买 nike

您好,我是第一次编写内核 (2.6),我在使用自旋锁时遇到问题。

我正在尝试添加这个系统调用 (inserisci_nodo) 来外部化一个结构(一个 ibrid 列表哈希表),并尝试在这个结构中添加一个节点 (Persona),如果该节点已经存在,它将被更新。

我在第一次“更新”时遇到了问题,事实上,如果我尝试插入所有新节点,它就可以工作!但是如果我尝试插入一个已经存在的节点,这似乎已经被锁定。我不明白为什么。

这是代码。

 asmlinkage long sys_inserisci_nodo(key_t id, char* nome, int eta){
persona *p;
spin_lock(&htable.lock);
printk("<3> PRESO SPIN_LOCK TABELLA\n");

if((p=lookup(id))!=NULL){ //Update an already existent node
printk("<3> NODO %d, AGGIORNAMENTO IN CORSO....\n",id); <--- system locked.
spin_lock(&(p->lock));
printk("<3> PRESO SPIN_LOCK NODO %d\n",id);

p->eta=eta;
strcpy(p->nome, nome);
printk("<3> NODO %d, AGGIORNAMENTO... OK\n",id);

spin_unlock(&p->lock);

printk("<3> RILASCIATO SPIN_LOCK NODO %d\n",id);
spin_unlock(&htable.lock);
printk("<3> RILASCIATO SPIN_LOCK TABELLA\n");

return p->id;
}
else{ //Insert new node.
p = (persona *) kmalloc(sizeof(persona),GFP_KERNEL);
if(p==NULL){
printk("<3> ERRORE NELL'ALLOCARE MEMORIA PER PERSONA CON ID: %d\n",id);
spin_unlock(&htable.lock);
printk("<3> RILASCIATO SPIN_LOCK TABELLA\n");
return -1;
}
p->id = id;
p->eta=eta;
p->nome = (char*) kmalloc(sizeof(nome),GFP_KERNEL);
strcpy(p->nome, nome);
printk("<3> NODO %d, AGGIUNTO\n",id);

int h = hashfunc(id);
p->next=htable.persone[h];
htable.persone[h] = p;
spin_unlock(&htable.lock);
printk("<3> RILASCIATO SPIN_LOCK TABELLA\n");
return h;

}
}

对不起代码上的意大利语,我在代码上添加了一些英文注释。

这是两个结构(哈希表和“角色”(节点))。

typedef struct _persona{
key_t id;
char *nome;
int eta;
spinlock_t lock;
struct _persona *next;
}persona;

typedef struct _hashtable{
spinlock_t lock;
int occupati;
persona* persone[MAX_NUM];
}hashtable;

“lookup(key)”和“hash(key)”是从结构中获取节点的两个简单函数。

我希望你对此有一个想法:)

再见!

最佳答案

你需要初始化自旋锁:

p->id = id;
p->eta=eta;
p->nome = (char*) kmalloc(sizeof(nome),GFP_KERNEL);
spin_lock_init(&p->lock); // <- don't forget to initialize the locks!

关于c - spinlock_t 在第一次使用时已经锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13631194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com