On Sunday 29 May 2005 06:33 pm, egl wrote:
> vreau sa trimit o structura de date
> (o lista mai exact) din 'user space'in
> 'kernel space' de unde sa o prelucrez
> intr-un modul kernel.daca un element al
> listei are campuri de genul int sau char*
> nu e chiar o problema folosind get_user()
> si apeluri ioctl, insa daca am multe elemente
> sau pur si simplu un vector de 100 de intregi
Vezi copy_from_user().
> devine complicat (mai degraba ineficient mi se
> pare sa trimit cate o variabila si dupa aia sa
> ma intreb daca mai vine ceva sau e gata).
> ce solutie am la indemana?
>
Daca inteleg eu bine, vrei sa transferi lista intr-un singur ioctl:
int ioctl(FILE *file, int cmd, void *arg)
{
struct my_struct {
struct my_struct *next;
....
} *i, *j, *head=NULL;
do {
if (!(j=kmalloc(sizeof(*j), GFP_KERNEL))) {
//stergi bucata de lista partial copiata
return -ENOMEM;
}
if (copy_from_user(j, arg, sizeof(*j))) {
//stergi bucata de lista partial copiata
return -EFAULT;
}
arg=j->next; j->next=NULL;
if (!head) {
head=i=j;
} else {
i->next=j; i=j;
}
} while (arg);
}
tavi
---
Detalii despre listele noastre de mail: http://www.lug.ro/