[OpenIndiana-discuss] Openindiana in VMWare and usb devices

Andrew Gabriel illumos at cucumber.demon.co.uk
Sun Jun 26 10:10:23 UTC 2011


Gabriele Bulfon wrote:
> No way.........USB CDC modem/fax under VMWare Esxi 4.1 does not work....
> Everything looks fine under the OS (devices, dev/cua, messages from the USB management),
> but then tip does not attach as if the dev file is missing, or maybe just not responding....
> Anyone does have the ability to check this why?
>   

Try running this dtrace script while doing the failing tip, to see
where in the kernel the ENXIO is coming from. Drop it into a
file with the #! as the first line and with +x access, and just run
the file.

#!/usr/sbin/dtrace -Fs
#pragma D option bufsize=1m
#pragma D option specsize=1m

syscall::open:entry
/execname == "tip"/
{
        /*
         * The call to speculation() creates a new speculation.  If this 
fails,
         * dtrace(1M) will generate an error message indicating the 
reason for
         * the failed speculation(), but subsequent speculative tracing 
will be
         * silently discarded.
         */
        self->spec = speculation();
        speculate(self->spec);

        /*
         * Because this printf() follows the speculate(), it is being
         * speculatively traced; it will only appear in the data buffer 
if the
         * speculation is subsequently commited.
         */
        printf("%s", stringof(copyinstr(arg0)));
}

fbt:::entry
/self->spec/
{
        /*
         * A speculate() with no other actions speculates the default 
action:
         * tracing the EPID.
         */
        speculate(self->spec);
        printf("%x %x %x %x %x", arg0, arg1, arg2, arg3, arg4);
}

fbt:::return
/self->spec/
{
        /*
         * A speculate() with no other actions speculates the default 
action:
         * tracing the EPID.
         */
        speculate(self->spec);
        printf("%x errno=%d", arg1, errno);
}

syscall::open:return
/self->spec/
{
        /*
         * To balance the output with the -F option, we want to be sure that
         * every entry has a matching return.  Because we speculated the
         * open entry above, we want to also speculate the open return.
         * This is also a convenient time to trace the errno value.
         */
        speculate(self->spec);
        trace(errno);
}

syscall::open:return
/self->spec && errno == ENXIO/
{
        /*
         * If errno is ENXIO, we want to commit the speculation.
         */
        commit(self->spec);
        self->spec = 0;
}

syscall::open:return
/self->spec && errno != ENXIO/
{
        /*
         * If errno is not ENXIO, we discard the speculation.
         */
        discard(self->spec);
        self->spec = 0;
}

-- 
Andrew



More information about the OpenIndiana-discuss mailing list