On 3/15/2018 4:47 PM, Anirudh Venkataramanan wrote:
This patch introduces data structures and functions to alloc/free
VSIs. The driver represents a VSI using the ice_vsi structure.

Some noteworthy points about VSI allocation:

1) A VSI is allocated in the firmware using the "add VSI" admin queue
    command (implemented as ice_aq_add_vsi). The firmware returns an
    identifier for the allocated VSI. The VSI context is used to program
    certain aspects (loopback, queue map, etc.) of the VSI's configuration.

2) A VSI is deleted using the "free VSI" admin queue command (implemented
    as ice_aq_free_vsi).

3) The driver represents a VSI using struct ice_vsi. This is allocated
    and initialized as part of the ice_vsi_alloc flow, and deallocated
    as part of the ice_vsi_delete flow.

4) Once the VSI is created, a netdev is allocated and associated with it.
    The VSI's ring and vector related data structures are also allocated
    and initialized.

5) A VSI's queues can either be contiguous or scattered. To do this, the
    driver maintains a bitmap (vsi->avail_txqs) which is kept in sync with
    the firmware's VSI queue allocation imap. If the VSI can't get a
    contiguous queue allocation, it will fallback to scatter. This is
    implemented in ice_vsi_get_qs which is called as part of the VSI setup
    flow. In the release flow, the VSI's queues are released and the bitmap
    is updated to reflect this by ice_vsi_put_qs.

CC: Shannon Nelson <shannon.nel...@oracle.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkatarama...@intel.com>
---
v2: Addressed Shannon Nelson's comments by
    1) using a new define ICE_NO_VSI instead of the magic number 0xffff.
    2) adding missing curly braces and break statements.

Also, ice_set_def_vsi_ctx was changed to ice_set_dflt_vsi_ctx for clarity.

Thanks,
sln
Acked-by: Shannon Nelson <shannon.nel...@oracle.com>

Reply via email to