Hi Thomas, Thanks for comment. The ixgbevf_negotiate_api is copied from Intel's VF driver. The while loop is not quite usual, indeed. A direct call to ixgbevf_negotiate_api_version(hw, ixgbe_mbox_api_11) is sufficient, I think. Coz PF is supposed to be satisfied with ver 1.1. I will make another attempt with elimination of ixgbevf_negotiate_api.
Any other comment? thx & rgds, -ql On Mon, Oct 21, 2013 at 11:36 AM, Thomas Monjalon <thomas.monjalon at 6wind.com> wrote: > Hi, > > 21/10/2013 09:09, Qinglai Xiao : >> Physical Function assignes Tx/Rx queues to each VF according to >> different schemes[1]. By querying through mailbox, VF is able to >> get number of Tx/Rx queues assigned to it. >> >> Note that current Intel ixgbe driver ixgbe-3.18.7 does not fully >> support mailbox message IXGBE_VF_GET_QUEUES. The service routine >> for IXGBE_VF_GET_QUEUES must be fixed, otherwise PF always return >> 1 as Tx/Rx queue number. >> >> [1] See section 7.2.1.2.1, 7.1.2.2 and 7.10.2.7.2 of Intel 82599 10 >> Gbe Controller Datasheet. >> >> Signed-off-by: Qinglai Xiao <jigsaw at gmail.com> >> --- > > Thanks for the patch, your comments are clear. > >> +static void ixgbevf_negotiate_api(struct ixgbe_hw *hw) >> +{ >> + int api[] = { ixgbe_mbox_api_11, >> + ixgbe_mbox_api_10, >> + ixgbe_mbox_api_unknown }; >> + int err = 0, idx = 0; >> + >> + while (api[idx] != ixgbe_mbox_api_unknown) { >> + err = ixgbevf_negotiate_api_version(hw, api[idx]); >> + if (!err) >> + break; >> + idx++; >> + } >> +} > > I have comments about the mbox API: > 1) Why not call directly ixgbevf_negotiate_api_version for ixgbe_mbox_api_11 > only ? > It seems that only version 1.1 supports ixgbevf_get_queues. > 2) If a loop is still needed, why not use a simple "for loop" ? > 3) If ixgbevf_negotiate_api is still needed, I'd prefer to have "_mbx" in its > name. > > Thank you > -- > Thomas