|  |  | 
  
    |  |  | 
 
  |   |  | 
  
    |  |  | 
  
    |  |  | 
  
    |   xen-devel
Re: [Xen-devel] FreeBSD netfront.c / problem 
| At Thu, 09 Mar 2006 16:36:13 +0100,
Simon Kagstrom wrote:
>  48   for (i = 0, m_new = sc->xn_rx_batch; m_new; 
>  49        i++, sc->xn_rx_batchlen--, m_new = next) {
>  50 
>               [...]
>  70           rx_pfn_array[i] = vtomach(mtod(m_new,vm_offset_t)) >> 
> PAGE_SHIFT;
> 
> The above call fails gives -1 (i.e., an invalid virtual -> machine
> translation) time since some mbufs are placed on the same page.
> 
>  71           
>  72           /* Remove this page from pseudo phys map before passing back to 
> Xen. */
>  73           xen_phys_machine[((unsigned long)m_new->m_ext.ext_args >> 
> PAGE_SHIFT)] 
>  74           = INVALID_P2M_ENTRY;
> 
> ... because this invalidates that mapping. I therefore get every
> [...]
> second entry in rx_pfn_array set to -1.
> Questions: I don't know FreeBSD very well, but does FreeBSD always
> place the mbufs on separate pages? How could the above code otherwise
> work?
I think I found the problem myself, in sys/i386-xen/conf/XENCONF,
MCLSHIFT is defined to 12, which means that each mbuf cluster will be
4KB large. I had it at 11, which should explain why every second
rx_pfn_array was reset.
So, then I'm curious: was this the reason for setting MCLSHIFT to 12
in FreeBSD?
// Simon
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
 | 
 |  | 
  
    |  |  |