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/


Raspunde prin e-mail lui