summaryrefslogtreecommitdiffstats
path: root/src/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/net')
-rw-r--r--src/drivers/net/intelxl.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/drivers/net/intelxl.c b/src/drivers/net/intelxl.c
index ac9e37c5a..111ac98ed 100644
--- a/src/drivers/net/intelxl.c
+++ b/src/drivers/net/intelxl.c
@@ -593,18 +593,20 @@ static int intelxl_admin_switch ( struct intelxl_nic *intelxl ) {
struct intelxl_admin_descriptor *cmd;
struct intelxl_admin_switch_params *sw;
union intelxl_admin_buffer *buf;
+ uint16_t next = 0;
int rc;
- /* Populate descriptor */
- cmd = intelxl_admin_command_descriptor ( intelxl );
- cmd->opcode = cpu_to_le16 ( INTELXL_ADMIN_SWITCH );
- cmd->flags = cpu_to_le16 ( INTELXL_ADMIN_FL_BUF );
- cmd->len = cpu_to_le16 ( sizeof ( buf->sw ) );
- sw = &cmd->params.sw;
- buf = intelxl_admin_command_buffer ( intelxl );
-
/* Get each configuration in turn */
do {
+ /* Populate descriptor */
+ cmd = intelxl_admin_command_descriptor ( intelxl );
+ cmd->opcode = cpu_to_le16 ( INTELXL_ADMIN_SWITCH );
+ cmd->flags = cpu_to_le16 ( INTELXL_ADMIN_FL_BUF );
+ cmd->len = cpu_to_le16 ( sizeof ( buf->sw ) );
+ sw = &cmd->params.sw;
+ sw->next = next;
+ buf = intelxl_admin_command_buffer ( intelxl );
+
/* Issue command */
if ( ( rc = intelxl_admin_command ( intelxl ) ) != 0 )
return rc;
@@ -624,7 +626,7 @@ static int intelxl_admin_switch ( struct intelxl_nic *intelxl ) {
buf->sw.cfg.connection );
}
- } while ( sw->next );
+ } while ( ( next = sw->next ) );
/* Check that we found a VSI */
if ( ! intelxl->vsi ) {