Le Jeudi 28 Septembre 2006 17:07, Hollis Blanchard a écrit :
> On Thu, 2006-09-28 at 08:27 +0200, Tristan Gingold wrote:
> > Le Mercredi 27 Septembre 2006 17:10, Hollis Blanchard a écrit :
> > > On Wed, 2006-09-27 at 08:19 +0200, Tristan Gingold wrote:
> > > > Le Mardi 26 Septembre 2006 20:23, Hollis Blanchard a écrit :
> > > > > On Tue, 2006-09-26 at 10:04 +0200, Tristan Gingold wrote:
> > > > > > After more work, inline xencomm is not that magic: it doesn't
> > > > > > work for modules which are loaded in virtual memory.  So I have
> > > > > > to use mini xencomm at least for modules.
> > > > >
> > > > > What's the problem with modules? Their text/data isn't physically
> > > > > contiguous, but where exactly is the problem?
> > > >
> > > > Inline xencomm only works for physically contiguous area because only
> > > > the base address is passed.  Therefore it doesn't work for modules.
> > >
> > > I understand that; please explain exactly what about the modules isn't
> > > working.
> > >
> > > For example, the stack used in kernel modules is still physically
> > > contiguous, so using stack-allocated data structures should work fine.
> > > However, making hypercalls directly using global data structures
> > > wouldn't work. However, the "inline" code is only being used for the
> > > hypercalls that could be made early. Is that the problem? Please
> > > identify the specific issue(s).
> >
> > Yes, some hypercalls data are global data.
> > Sorry, I was not specific enough!
>
> Hi Tristan, *which* hypercalls? Please identify some specific lines of
> code that are causing the problems...
This issue was at least hit in drivers/xen/netback/netback.c:

static void net_rx_action(unsigned long unused)
{
        netif_t *netif = NULL;
        s8 status;
        u16 id, irq, flags;
        netif_rx_response_t *resp;
        multicall_entry_t *mcl;
        struct sk_buff_head rxq;
        struct sk_buff *skb;
        int notify_nr = 0;
        int ret;
        int nr_frags;
        int count;
        unsigned long offset;

        /*
         * Putting hundreds of bytes on the stack is considered rude.
         * Static works because a tasklet can only be on one CPU at any time.
         */
        static multicall_entry_t rx_mcl[NET_RX_RING_SIZE+3];
        static mmu_update_t rx_mmu[NET_RX_RING_SIZE];
        static gnttab_transfer_t grant_trans_op[NET_RX_RING_SIZE];
        static gnttab_copy_t grant_copy_op[NET_RX_RING_SIZE];
        static unsigned char rx_notify[NR_IRQS];
        static u16 notify_list[NET_RX_RING_SIZE];
        static struct netbk_rx_meta meta[NET_RX_RING_SIZE];

Lot's of hypercall parameters in module data segment!

Tristan.

_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@lists.xensource.com
http://lists.xensource.com/xen-ppc-devel

Reply via email to