dev: keep dev_instance data in struct
Type: refactor Change-Id: I05d04e2e9872d025384524b1bc133d909581e18a Signed-off-by: Damjan Marion <damjan.marion@gmail.com>
This commit is contained in:
@ -263,7 +263,7 @@ vnet_dev_api_remove_port_if (vlib_main_t *vm,
|
|||||||
if (!hi)
|
if (!hi)
|
||||||
return VNET_DEV_ERR_UNKNOWN_INTERFACE;
|
return VNET_DEV_ERR_UNKNOWN_INTERFACE;
|
||||||
|
|
||||||
if (pool_is_free_index (dm->ports_by_dev_instance, hi->dev_instance))
|
if (pool_is_free_index (dm->dev_instances, hi->dev_instance))
|
||||||
return VNET_DEV_ERR_UNKNOWN_INTERFACE;
|
return VNET_DEV_ERR_UNKNOWN_INTERFACE;
|
||||||
|
|
||||||
port = vnet_dev_get_port_from_dev_instance (hi->dev_instance);
|
port = vnet_dev_get_port_from_dev_instance (hi->dev_instance);
|
||||||
|
@ -459,12 +459,17 @@ typedef struct
|
|||||||
vnet_dev_ops_t ops;
|
vnet_dev_ops_t ops;
|
||||||
} vnet_dev_driver_t;
|
} vnet_dev_driver_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
vnet_dev_port_t *port;
|
||||||
|
} vnet_dev_instance_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
vnet_dev_bus_t *buses;
|
vnet_dev_bus_t *buses;
|
||||||
vnet_dev_driver_t *drivers;
|
vnet_dev_driver_t *drivers;
|
||||||
vnet_dev_t **devices;
|
vnet_dev_t **devices;
|
||||||
vnet_dev_port_t **ports_by_dev_instance;
|
vnet_dev_instance_t *dev_instances;
|
||||||
vnet_dev_bus_registration_t *bus_registrations;
|
vnet_dev_bus_registration_t *bus_registrations;
|
||||||
vnet_dev_driver_registration_t *driver_registrations;
|
vnet_dev_driver_registration_t *driver_registrations;
|
||||||
void *runtime_temp_spaces;
|
void *runtime_temp_spaces;
|
||||||
|
@ -51,13 +51,21 @@ vnet_dev_get_port_by_index (vnet_dev_t *dev, u32 index)
|
|||||||
return pool_elt_at_index (dev->ports, index)[0];
|
return pool_elt_at_index (dev->ports, index)[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static_always_inline vnet_dev_instance_t *
|
||||||
|
vnet_dev_get_dev_instance (u32 dev_instance)
|
||||||
|
{
|
||||||
|
vnet_dev_main_t *dm = &vnet_dev_main;
|
||||||
|
if (pool_is_free_index (dm->dev_instances, dev_instance))
|
||||||
|
return 0;
|
||||||
|
return pool_elt_at_index (dm->dev_instances, dev_instance);
|
||||||
|
}
|
||||||
|
|
||||||
static_always_inline vnet_dev_port_t *
|
static_always_inline vnet_dev_port_t *
|
||||||
vnet_dev_get_port_from_dev_instance (u32 dev_instance)
|
vnet_dev_get_port_from_dev_instance (u32 dev_instance)
|
||||||
{
|
{
|
||||||
vnet_dev_main_t *dm = &vnet_dev_main;
|
vnet_dev_instance_t *di = vnet_dev_get_dev_instance (dev_instance);
|
||||||
if (pool_is_free_index (dm->ports_by_dev_instance, dev_instance))
|
|
||||||
return 0;
|
return di ? di->port : 0;
|
||||||
return pool_elt_at_index (dm->ports_by_dev_instance, dev_instance)[0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static_always_inline vnet_dev_port_t *
|
static_always_inline vnet_dev_port_t *
|
||||||
|
@ -517,7 +517,7 @@ vnet_dev_port_if_create (vlib_main_t *vm, vnet_dev_port_t *port)
|
|||||||
u16 n_threads = vlib_get_n_threads ();
|
u16 n_threads = vlib_get_n_threads ();
|
||||||
vnet_dev_main_t *dm = &vnet_dev_main;
|
vnet_dev_main_t *dm = &vnet_dev_main;
|
||||||
vnet_dev_t *dev = port->dev;
|
vnet_dev_t *dev = port->dev;
|
||||||
vnet_dev_port_t **pp;
|
vnet_dev_instance_t *di;
|
||||||
vnet_dev_rv_t rv;
|
vnet_dev_rv_t rv;
|
||||||
u16 ti = 0;
|
u16 ti = 0;
|
||||||
|
|
||||||
@ -563,10 +563,9 @@ vnet_dev_port_if_create (vlib_main_t *vm, vnet_dev_port_t *port)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* pool of port pointers helps us to assign unique dev_instance */
|
pool_get (dm->dev_instances, di);
|
||||||
pool_get (dm->ports_by_dev_instance, pp);
|
port->intf.dev_instance = di - dm->dev_instances;
|
||||||
port->intf.dev_instance = pp - dm->ports_by_dev_instance;
|
di->port = port;
|
||||||
pp[0] = port;
|
|
||||||
|
|
||||||
if (port->attr.type == VNET_DEV_PORT_TYPE_ETHERNET)
|
if (port->attr.type == VNET_DEV_PORT_TYPE_ETHERNET)
|
||||||
{
|
{
|
||||||
@ -709,7 +708,7 @@ vnet_dev_port_if_remove (vlib_main_t *vm, vnet_dev_port_t *port)
|
|||||||
vlib_worker_thread_barrier_sync (vm);
|
vlib_worker_thread_barrier_sync (vm);
|
||||||
vnet_delete_hw_interface (vnm, port->intf.hw_if_index);
|
vnet_delete_hw_interface (vnm, port->intf.hw_if_index);
|
||||||
vlib_worker_thread_barrier_release (vm);
|
vlib_worker_thread_barrier_release (vm);
|
||||||
pool_put_index (dm->ports_by_dev_instance, port->intf.dev_instance);
|
pool_put_index (dm->dev_instances, port->intf.dev_instance);
|
||||||
port->interface_created = 0;
|
port->interface_created = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user