Re: vma (loop 4ever)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Lin ,
      Thank you very much Lin for you answer,but get_gate_vma is not exported by kernel. I'm using map_count now to finish my loop .
 
 int vma_pos=0;
 ...
 vma = tsk->mm->mmap;
 while (1)
{
   vma_pos++;
   ...
   if (vma_pos == tsk->mm->map_count )
                        break ;
   vma=vma->vm_next;
 }
...


Thanks.


On 9/12/06, Mauricio Lin <mauriciolin2000@xxxxxxxxxxxx> wrote:
Hi Keppler,

You should put something like:

struct vm_area_struct *tail_vma = NULL;
tail_vma = get_gate_vma(tsk);

// iterate over the vma
while (vma && (vma != tail_vma)) {
...
}

For more details you can check how the m_start() and m_next() functions
handle VMAs on fs/proc/task_mmu.c file.

BR,

Mauricio Lin.

--- Keppler Alecrim <alecrim@xxxxxxxxx > escreveu:

> Hi all ,
>      I'm studying vma.This is my proc_read function and I want to
> return vma
> list information related with a current task. But , the loop(while
> (vma))
> does not stop.What is wrong  ?
> Can anyone help me ?
>
> int my_get_info( char *buf, char **start, off_t off, int count )
> {
>         struct task_struct      *tsk = current;
>         struct vm_area_struct   *vma;
>         unsigned long           ptdb;
>         int    i = 0, len = 0;
>
>         // display title
>         len += sprintf( buf+len, "\n\nList of the Virtual Memory
> Areas " );
>         len += sprintf( buf+len, "for task \'%s\' ", tsk->comm );
>         len += sprintf( buf+len, "(pid=%d)\n", tsk->pid );
>
>         // loop to traverse the list of the task's vm_area_structs
>         vma = tsk->mm->mmap;
>         while ( vma )
>                 {
>                 char    ch;
>                 len += sprintf( buf+len, "\n%3d ", ++i );
>                 len += sprintf( buf+len, " vm_start=%08lX ",
> vma->vm_start
> );
>                 len += sprintf( buf+len, " vm_end=%08lX  ",
> vma->vm_end );
>
>                 ch = ( vma->vm_flags & VM_READ ) ? 'r' : '-';
>                 len += sprintf( buf+len, "%c", ch );
>
>                 ch = ( vma->vm_flags & VM_WRITE ) ? 'w' : '-';
>                 len += sprintf( buf+len, "%c", ch );
>
>                 ch = ( vma->vm_flags & VM_EXEC ) ? 'x' : '-';
>                 len += sprintf( buf+len, "%c", ch );
>
>                 ch = ( vma->vm_flags & VM_SHARED ) ? 's' : 'p';
>                 len += sprintf( buf+len, "%c", ch );
>
>                 vma = vma->vm_next;
>                 }
>         len += sprintf( buf+len, "\n" );
>         // display additional information about tsk->mm
>         asm(" movl %%cr3, %%ecx \n movl %%ecx, %0 " : "=m" (ptdb) );
>         len += sprintf( buf+len, "\nCR3=%08lX ", ptdb );
>         len += sprintf( buf+len, " mm->pgd=%p ", tsk->mm->pgd );
>         len += sprintf( buf+len, " mm->map_count=%d ",
> tsk->mm->map_count );
>         len += sprintf( buf+len, "\n\n" );
>
>         return  len;
>
> }
>
> My code is based on  : http://www.cs.usfca.edu/~cruse/cs635/vma.c
>
> --
> --
> Francisco Keppler Silva Alecrim
> Instituto Nokia de Tecnologia (INdT)
> Open Source Mobile Research Center (OSMRC)
>






_______________________________________________________
Você quer respostas para suas perguntas? Ou você sabe muito e quer compartilhar seu conhecimento? Experimente o Yahoo! Respostas !
http://br.answers.yahoo.com/



--
--
Francisco Keppler Silva Alecrim
Instituto Nokia de Tecnologia (INdT)
Open Source Mobile Research Center (OSMRC)

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux