WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH 12/12] Unplug emulated disks and nics

On Thu, Jun 17, 2010 at 04:42:14PM +0100, Stefano Stabellini wrote:
> On Mon, 14 Jun 2010, Konrad Rzeszutek Wilk wrote:
> > > +#if (defined(CONFIG_XEN_NETDEV_FRONTEND) || \
> > > +         defined(CONFIG_XEN_NETDEV_FRONTEND_MODULE)) && \
> > > +         (defined(CONFIG_XEN_PLATFORM_PCI) || \
> > > +          defined(CONFIG_XEN_PLATFORM_PCI_MODULE))
> > > +         printk(KERN_INFO "Netfront and the Xen platform PCI driver have 
> > > "
> > > +                         "been compiled for this kernel: unplug emulated 
> > > NICs.\n");
> > > +         xen_emul_unplug |= XEN_UNPLUG_ALL_NICS;
> > > +#endif
> > > +#if (defined(CONFIG_XEN_BLKDEV_FRONTEND) || \
> > > +         defined(CONFIG_XEN_BLKDEV_FRONTEND_MODULE)) && \
> > > +         (defined(CONFIG_XEN_PLATFORM_PCI) || \
> > > +          defined(CONFIG_XEN_PLATFORM_PCI_MODULE))
> > > +         printk(KERN_INFO "Blkfront and the Xen platform PCI driver have 
> > > "
> > > +                         "been compiled for this kernel: unplug emulated 
> > > disks.\n"
> > > +                         "You might have to change the root device\n"
> > > +                         "from /dev/hd[a-d] to /dev/xvd[a-d]\n"
> > > +                         "in your root= kernel command line option\n");
> > > +         xen_emul_unplug |= XEN_UNPLUG_ALL_IDE_DISKS;
> > > +#endif
> > 
> > Wow. Can you move those checks to the header file and make it deal with
> > the #ifdef and setting of xen_emul_unplug?
> > 
> 
> I tried, but it didn't improve the elegance of the code, mainly because I
> want to keep the printk in place, so the code would look very much like
> this, but instead of being in platform-pci-unplug.c would be in
> platform_pci.h.

If was thinking of something like this in the header file:


int xen_must_unplug_nics() {
#if (defined(CONFIG_XEN_NETDEV_FRONTEND) || \
                defined(CONFIG_XEN_NETDEV_FRONTEND_MODULE)) && \
                (defined(CONFIG_XEN_PLATFORM_PCI) || \
                 defined(CONFIG_XEN_PLATFORM_PCI_MODULE))
        return 1;
#else
        return 0;
}

and then your code would be:

        if (xen_must_unplug_nics()) {
                printk(".. blah blah ");
                xen_emul_unplug |- XEN_unPLIG_ALL_NICS;
        }

and similar for the IDE disks.

> 
> 
> > > + }
> > > + /* Now unplug the emulated devices */
> > > + if (xen_platform_pci_enabled && !(xen_emul_unplug & XEN_UNPLUG_IGNORE))
> > > +         outw(xen_emul_unplug, XEN_IOPORT_UNPLUG);
> > > +}
> > > +
> > > +static int __init parse_xen_emul_unplug(char *arg)
> > > +{
> > > + char *p, *q;
> > > +
> > > + for (p = arg; p; p = q) {
> > > +         q = strchr(arg, ',');
> > > +         if (q)
> > > +                 *q++ = '\0';
> > > +         if (!strcmp(p, "all"))
> > > +                 xen_emul_unplug |= XEN_UNPLUG_ALL;
> > 
> > strncmp..
> > 
> 
> is it really needed considering that we know that both strings are NULL
> terminated and one of them is a constant?

Please do.

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