<br><div></div><br><pre><br>At&nbsp;2011-07-08&nbsp;02:37:46,"Hans&nbsp;J.&nbsp;Koch"&nbsp;&lt;hjk@hansjkoch.de&gt;&nbsp;wrote:

&gt;On&nbsp;Thu,&nbsp;Jul&nbsp;07,&nbsp;2011&nbsp;at&nbsp;07:15:25AM&nbsp;-0700,&nbsp;Greg&nbsp;KH&nbsp;wrote:
&gt;&gt;&nbsp;On&nbsp;Thu,&nbsp;Jul&nbsp;07,&nbsp;2011&nbsp;at&nbsp;03:32:54PM&nbsp;+0800,&nbsp;bill&nbsp;wrote:
&gt;&gt;&nbsp;&gt;&nbsp;Hi,&nbsp;Greg
&gt;&gt;&nbsp;&gt;&nbsp;
&gt;&gt;&nbsp;&gt;&nbsp;I've&nbsp;been&nbsp;reading&nbsp;the&nbsp;UIO&nbsp;code,&nbsp;one&nbsp;place&nbsp;puzzled&nbsp;me&nbsp;a&nbsp;lot.
&gt;&gt;&nbsp;&gt;&nbsp;May&nbsp;I&nbsp;ask&nbsp;one&nbsp;question&nbsp;about&nbsp;it?
&gt;&gt;&nbsp;&gt;&nbsp;
&gt;&gt;&nbsp;&gt;&nbsp;-------------------------------------------------------------------------------
&gt;&gt;&nbsp;&gt;&nbsp;drivers/uio/uio.c
&gt;&gt;&nbsp;&gt;&nbsp;static&nbsp;int&nbsp;uio_find_mem_index(struct&nbsp;vm_area_struct&nbsp;*vma)
&gt;&gt;&nbsp;&gt;&nbsp;{
&gt;&gt;&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;mi;
&gt;&gt;&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;uio_device&nbsp;*idev&nbsp;=&nbsp;vma-&gt;vm_private_data;
&gt;&gt;&nbsp;&gt;&nbsp;
&gt;&gt;&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(mi&nbsp;=&nbsp;0;&nbsp;mi&nbsp;&lt;&nbsp;MAX_UIO_MAPS;&nbsp;mi++)&nbsp;{
&gt;&gt;&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(idev-&gt;info-&gt;mem[mi].size&nbsp;==&nbsp;0)
&gt;&gt;&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;
&gt;&gt;&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(vma-&gt;vm_pgoff&nbsp;==&nbsp;mi)
&gt;&gt;&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;mi;
&gt;&gt;&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&gt;&gt;&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;
&gt;&gt;&nbsp;&gt;&nbsp;}
&gt;&gt;&nbsp;&gt;&nbsp;
&gt;&gt;&nbsp;&gt;&nbsp;I&nbsp;don't&nbsp;get&nbsp;it&nbsp;why&nbsp;use&nbsp;vma-&gt;vm_pgoff&nbsp;as&nbsp;the&nbsp;index&nbsp;for&nbsp;struct&nbsp;uio_mem&nbsp;mem[MAX_UIO_MAPS],
&gt;&gt;&nbsp;&gt;&nbsp;Suppose&nbsp;there&nbsp;are&nbsp;twohardware&nbsp;memory&nbsp;space,&nbsp;if&nbsp;user&nbsp;intends&nbsp;to&nbsp;map&nbsp;the&nbsp;2nd&nbsp;mem,&nbsp;then
&gt;&gt;&nbsp;&gt;&nbsp;the&nbsp;last&nbsp;parameter&nbsp;of&nbsp;mmap&nbsp;should&nbsp;be&nbsp;1,
&gt;&gt;&nbsp;&gt;&nbsp;
&gt;&gt;&nbsp;&gt;&nbsp;mapaddr&nbsp;=&nbsp;mmap(NULL,&nbsp;size,&nbsp;PROT_READ&nbsp;|&nbsp;PROT_WRITE,&nbsp;MAP_SHARED,
&gt;&gt;&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd,&nbsp;1);
&gt;&gt;&nbsp;&gt;&nbsp;
&gt;&gt;&nbsp;&gt;&nbsp;Is&nbsp;my&nbsp;understanding&nbsp;correct?
&gt;
&gt;No,&nbsp;it&nbsp;isn't.&nbsp;The&nbsp;last&nbsp;parameter&nbsp;of&nbsp;mmap&nbsp;is&nbsp;divided&nbsp;by&nbsp;PAGE_SIZE&nbsp;before&nbsp;it
&gt;reaches&nbsp;the&nbsp;UIO&nbsp;core.&nbsp;Therefore,&nbsp;it&nbsp;has&nbsp;to&nbsp;be&nbsp;set&nbsp;to&nbsp;n&nbsp;*&nbsp;getpagesize().
&gt;This&nbsp;is&nbsp;explained&nbsp;in&nbsp;the&nbsp;docs&nbsp;under&nbsp;Documentation/DocBook/.
&gt;Use&nbsp;"make&nbsp;htmldocs"&nbsp;to&nbsp;generate&nbsp;HTML&nbsp;documentation.&nbsp;A&nbsp;faster&nbsp;way&nbsp;is&nbsp;to&nbsp;do
&gt;
&gt;dblatex&nbsp;Documentation/DocBook/uio-howto.tmpl
&gt;
&gt;This&nbsp;generates&nbsp;a&nbsp;PDF&nbsp;with&nbsp;the&nbsp;UIO&nbsp;documentation,&nbsp;provided&nbsp;you&nbsp;have&nbsp;a&nbsp;working
&gt;LaTeX&nbsp;system,&nbsp;and&nbsp;have&nbsp;dblatex&nbsp;installed.
&gt;
&gt;Thanks,
&gt;Hans
&gt;<br>Thanks for your explanation.<br>So vma-&gt;vm_pgoff is not used as its original meanings, that's the point puzzled me.<br>Now it's clear:)<br><br>&nbsp;&gt;&gt;&nbsp;
&gt;&gt;&nbsp;I&nbsp;really&nbsp;don't&nbsp;know,&nbsp;sorry.
&gt;&gt;&nbsp;
&gt;&gt;&nbsp;But&nbsp;Hans&nbsp;should&nbsp;know,&nbsp;Hans?
&gt;&gt;&nbsp;
&gt;&gt;&nbsp;
</pre><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>