Oh, don't forget to make : 

static char bdf_str[1024]; 

Anywhere in the nic_uio.c file, so this way the other methods can check the
content :-)

And remove the local declaration from nic_uio_load.

-----Mensagem original-----
De: dev [mailto:dev-bounces at dpdk.org] Em nome de Fred Pedrisa
Enviada em: quarta-feira, 26 de mar?o de 2014 04:22
Para: 'Masaru Oki'
Cc: dev at dpdk.org
Assunto: [dpdk-dev] RES: RES: hw.nic_uio.bdfs

Hello,

Here is my fix for probe code :

static int
nic_uio_probe (device_t dev)
{
        int i, len;
        char *remaining;
        long bus = 0, device = 0, function = 0;
        remaining = bdf_str;
        len = strlen(remaining);

        for (i = 0; remaining && len >= 5 && i < len;i+=6) {
                if ( remaining[i + 1] == ':' && remaining[i + 3] == ':' ) {
                        bus = strtol(&remaining[i + 0],NULL,0);
                        device = strtol(&remaining[i + 2],NULL,0);
                        function = strtol(&remaining[i + 4],NULL,0);
                        if (dev != NULL) {
                                if (pci_get_bus(dev) == bus &&
pci_get_slot(dev) == device && pci_get_function(dev) == function) {
                                        printf("nic_uio: success blocking
probe of : %ld:%ld:%ld!\n", bus, device, function);
                                        return (ENXIO);
                                }
                        }
                }
        }

        for (i = 0; i < NUM_DEVICES; i++)
                if (pci_get_vendor(dev) == devices[i].vend &&
                        pci_get_device(dev) == devices[i].dev) {

                        device_set_desc(dev, "Intel(R) DPDK PCI Device");
                        return (BUS_PROBE_SPECIFIC);
                }

        return (ENXIO);
}

Now it is working as intended ;)

-----Mensagem original-----
De: dev [mailto:dev-bounces at dpdk.org] Em nome de Fred Pedrisa Enviada em:
quarta-feira, 26 de mar?o de 2014 04:16
Para: 'Masaru Oki'
Cc: dev at dpdk.org
Assunto: [dpdk-dev] RES: hw.nic_uio.bdfs

Hello,



Yes, I am writing a fix for this too ;)



De: Masaru Oki [mailto:m-oki at stratosphere.co.jp] Enviada em: quarta-feira,
26 de mar?o de 2014 04:08
Para: Fred Pedrisa
Cc: dev at dpdk.org
Assunto: Re: [dpdk-dev] hw.nic_uio.bdfs



> By default nic_uio takes all the NICs for itself


Yes.

I think nic_uio_probe should check hw.nic_uio.bdfs.





2014-03-26 15:49 GMT+09:00 Fred Pedrisa <fredhps10 at hotmail.com>:

Hello,



By default nic_uio takes all the NICs for itself




So in theory, you needed an option to reserve some NIC ports to your system,
without DPDK taking it for itself




De: Masaru Oki [mailto:m-oki at stratosphere.co.jp] Enviada em: quarta-feira,
26 de mar?o de 2014 03:43


Para: Fred Pedrisa
Cc: dev at dpdk.org
Assunto: Re: [dpdk-dev] hw.nic_uio.bdfs



avoid??? want you hw.nic_uio.avoid_bdfs?


nic_uio behavior I guessed
1. detach kernel driver specified by hw.nic_uio.bdfs

2. attach nic_uio driver for all NICs not attached.

but 2. is not correct, I think.





2014-03-26 15:20 GMT+09:00 Fred Pedrisa <fredhps10 at hotmail.com>:

Hello,



You did not understand the purpose of that parameter, it is made to ?avoid?
nic_uio from pursuing the wanted NICs... so they are free to be used in the
system :)



Right now the code to handle it is wrong and I am trying to fix it myself.



De: Masaru Oki [mailto:m-oki at stratosphere.co.jp] Enviada em: quarta-feira,
26 de mar?o de 2014 03:16
Para: Fred Pedrisa
Cc: dev at dpdk.org
Assunto: Re: [dpdk-dev] hw.nic_uio.bdfs



Hi,

I tried with Intel version 1.6.0 and FreeBSD 9.2-RELEASE on VMware Player.

kldload nic_uio by hand, works fine.
But kldunload nic_uio only detach uio driver, don't re-attach kernel driver.

[oki@ ~]$ cat /boot/loader.conf
##############################################################
###  User settings  ##########################################
##############################################################
hw.contigmem.num_buffers=64
hw.contigmem.buffer_size=2097152
hw.nic_uio.bdfs="2:5:0,2:6:0"
contigmem_load="YES"
#nic_uio_load="YES"
[oki@ ~]$ pciconf -l | egrep '(em|uio)'
em0 at pci0:2:1:0: class=0x020000 card=0x075015ad chip=0x100f8086 rev=0x01
hdr=0x00
em1 at pci0:2:5:0: class=0x020000 card=0x075015ad chip=0x100f8086 rev=0x01
hdr=0x00
em2 at pci0:2:6:0: class=0x020000 card=0x075015ad chip=0x100f8086 rev=0x01
hdr=0x00
[oki@ ~]$ kenv hw.nic_uio.bdfs
2:5:0,2:6:0
[oki@ ~]$ sudo kldload nic_uio
Password:
[oki@ ~]$ pciconf -l | egrep '(em|uio)'
em0 at pci0:2:1:0: class=0x020000 card=0x075015ad chip=0x100f8086 rev=0x01
hdr=0x00
nic_uio0 at pci0:2:5:0:    class=0x020000 card=0x075015ad chip=0x100f8086
rev=0x01 hdr=0x00
nic_uio1 at pci0:2:6:0:    class=0x020000 card=0x075015ad chip=0x100f8086
rev=0x01 hdr=0x00
[oki@ ~]$ sudo kldunload nic_uio
[oki@ ~]$ pciconf -l | egrep '(em|uio)'
em0 at pci0:2:1:0: class=0x020000 card=0x075015ad chip=0x100f8086 rev=0x01
hdr=0x00
[oki@ ~]$



2014-03-26 14:35 GMT+09:00 Fred Pedrisa <fredhps10 at hotmail.com>:

Hi, guys.





This variable is not working as intended for FreeBSD :(



It does not dettach nic_uio from the wanted ports :/









Reply via email to