@@ -162,18 +162,18 @@ static int cmd_alloc_index(struct mlx5_cmd *cmd)
162162 int ret ;
163163
164164 spin_lock_irqsave (& cmd -> alloc_lock , flags );
165- ret = find_first_bit (& cmd -> bitmask , cmd -> max_reg_cmds );
166- if (ret < cmd -> max_reg_cmds )
167- clear_bit (ret , & cmd -> bitmask );
165+ ret = find_first_bit (& cmd -> vars . bitmask , cmd -> vars . max_reg_cmds );
166+ if (ret < cmd -> vars . max_reg_cmds )
167+ clear_bit (ret , & cmd -> vars . bitmask );
168168 spin_unlock_irqrestore (& cmd -> alloc_lock , flags );
169169
170- return ret < cmd -> max_reg_cmds ? ret : - ENOMEM ;
170+ return ret < cmd -> vars . max_reg_cmds ? ret : - ENOMEM ;
171171}
172172
173173static void cmd_free_index (struct mlx5_cmd * cmd , int idx )
174174{
175175 lockdep_assert_held (& cmd -> alloc_lock );
176- set_bit (idx , & cmd -> bitmask );
176+ set_bit (idx , & cmd -> vars . bitmask );
177177}
178178
179179static void cmd_ent_get (struct mlx5_cmd_work_ent * ent )
@@ -192,7 +192,7 @@ static void cmd_ent_put(struct mlx5_cmd_work_ent *ent)
192192
193193 if (ent -> idx >= 0 ) {
194194 cmd_free_index (cmd , ent -> idx );
195- up (ent -> page_queue ? & cmd -> pages_sem : & cmd -> sem );
195+ up (ent -> page_queue ? & cmd -> vars . pages_sem : & cmd -> vars . sem );
196196 }
197197
198198 cmd_free_ent (ent );
@@ -202,7 +202,7 @@ static void cmd_ent_put(struct mlx5_cmd_work_ent *ent)
202202
203203static struct mlx5_cmd_layout * get_inst (struct mlx5_cmd * cmd , int idx )
204204{
205- return cmd -> cmd_buf + (idx << cmd -> log_stride );
205+ return cmd -> cmd_buf + (idx << cmd -> vars . log_stride );
206206}
207207
208208static int mlx5_calc_cmd_blocks (struct mlx5_cmd_msg * msg )
@@ -974,7 +974,7 @@ static void cmd_work_handler(struct work_struct *work)
974974 cb_timeout = msecs_to_jiffies (mlx5_tout_ms (dev , CMD ));
975975
976976 complete (& ent -> handling );
977- sem = ent -> page_queue ? & cmd -> pages_sem : & cmd -> sem ;
977+ sem = ent -> page_queue ? & cmd -> vars . pages_sem : & cmd -> vars . sem ;
978978 down (sem );
979979 if (!ent -> page_queue ) {
980980 alloc_ret = cmd_alloc_index (cmd );
@@ -994,9 +994,9 @@ static void cmd_work_handler(struct work_struct *work)
994994 }
995995 ent -> idx = alloc_ret ;
996996 } else {
997- ent -> idx = cmd -> max_reg_cmds ;
997+ ent -> idx = cmd -> vars . max_reg_cmds ;
998998 spin_lock_irqsave (& cmd -> alloc_lock , flags );
999- clear_bit (ent -> idx , & cmd -> bitmask );
999+ clear_bit (ent -> idx , & cmd -> vars . bitmask );
10001000 spin_unlock_irqrestore (& cmd -> alloc_lock , flags );
10011001 }
10021002
@@ -1572,31 +1572,31 @@ void mlx5_cmd_allowed_opcode(struct mlx5_core_dev *dev, u16 opcode)
15721572 struct mlx5_cmd * cmd = & dev -> cmd ;
15731573 int i ;
15741574
1575- for (i = 0 ; i < cmd -> max_reg_cmds ; i ++ )
1576- down (& cmd -> sem );
1577- down (& cmd -> pages_sem );
1575+ for (i = 0 ; i < cmd -> vars . max_reg_cmds ; i ++ )
1576+ down (& cmd -> vars . sem );
1577+ down (& cmd -> vars . pages_sem );
15781578
15791579 cmd -> allowed_opcode = opcode ;
15801580
1581- up (& cmd -> pages_sem );
1582- for (i = 0 ; i < cmd -> max_reg_cmds ; i ++ )
1583- up (& cmd -> sem );
1581+ up (& cmd -> vars . pages_sem );
1582+ for (i = 0 ; i < cmd -> vars . max_reg_cmds ; i ++ )
1583+ up (& cmd -> vars . sem );
15841584}
15851585
15861586static void mlx5_cmd_change_mod (struct mlx5_core_dev * dev , int mode )
15871587{
15881588 struct mlx5_cmd * cmd = & dev -> cmd ;
15891589 int i ;
15901590
1591- for (i = 0 ; i < cmd -> max_reg_cmds ; i ++ )
1592- down (& cmd -> sem );
1593- down (& cmd -> pages_sem );
1591+ for (i = 0 ; i < cmd -> vars . max_reg_cmds ; i ++ )
1592+ down (& cmd -> vars . sem );
1593+ down (& cmd -> vars . pages_sem );
15941594
15951595 cmd -> mode = mode ;
15961596
1597- up (& cmd -> pages_sem );
1598- for (i = 0 ; i < cmd -> max_reg_cmds ; i ++ )
1599- up (& cmd -> sem );
1597+ up (& cmd -> vars . pages_sem );
1598+ for (i = 0 ; i < cmd -> vars . max_reg_cmds ; i ++ )
1599+ up (& cmd -> vars . sem );
16001600}
16011601
16021602static int cmd_comp_notifier (struct notifier_block * nb ,
@@ -1655,7 +1655,7 @@ static void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, u64 vec, bool force
16551655
16561656 /* there can be at most 32 command queues */
16571657 vector = vec & 0xffffffff ;
1658- for (i = 0 ; i < (1 << cmd -> log_sz ); i ++ ) {
1658+ for (i = 0 ; i < (1 << cmd -> vars . log_sz ); i ++ ) {
16591659 if (test_bit (i , & vector )) {
16601660 ent = cmd -> ent_arr [i ];
16611661
@@ -1744,7 +1744,7 @@ static void mlx5_cmd_trigger_completions(struct mlx5_core_dev *dev)
17441744 /* wait for pending handlers to complete */
17451745 mlx5_eq_synchronize_cmd_irq (dev );
17461746 spin_lock_irqsave (& dev -> cmd .alloc_lock , flags );
1747- vector = ~dev -> cmd .bitmask & ((1ul << (1 << dev -> cmd .log_sz )) - 1 );
1747+ vector = ~dev -> cmd .vars . bitmask & ((1ul << (1 << dev -> cmd . vars .log_sz )) - 1 );
17481748 if (!vector )
17491749 goto no_trig ;
17501750
@@ -1753,14 +1753,14 @@ static void mlx5_cmd_trigger_completions(struct mlx5_core_dev *dev)
17531753 * to guarantee pending commands will not get freed in the meanwhile.
17541754 * For that reason, it also has to be done inside the alloc_lock.
17551755 */
1756- for_each_set_bit (i , & bitmask , (1 << cmd -> log_sz ))
1756+ for_each_set_bit (i , & bitmask , (1 << cmd -> vars . log_sz ))
17571757 cmd_ent_get (cmd -> ent_arr [i ]);
17581758 vector |= MLX5_TRIGGERED_CMD_COMP ;
17591759 spin_unlock_irqrestore (& dev -> cmd .alloc_lock , flags );
17601760
17611761 mlx5_core_dbg (dev , "vector 0x%llx\n" , vector );
17621762 mlx5_cmd_comp_handler (dev , vector , true);
1763- for_each_set_bit (i , & bitmask , (1 << cmd -> log_sz ))
1763+ for_each_set_bit (i , & bitmask , (1 << cmd -> vars . log_sz ))
17641764 cmd_ent_put (cmd -> ent_arr [i ]);
17651765 return ;
17661766
@@ -1773,22 +1773,22 @@ void mlx5_cmd_flush(struct mlx5_core_dev *dev)
17731773 struct mlx5_cmd * cmd = & dev -> cmd ;
17741774 int i ;
17751775
1776- for (i = 0 ; i < cmd -> max_reg_cmds ; i ++ ) {
1777- while (down_trylock (& cmd -> sem )) {
1776+ for (i = 0 ; i < cmd -> vars . max_reg_cmds ; i ++ ) {
1777+ while (down_trylock (& cmd -> vars . sem )) {
17781778 mlx5_cmd_trigger_completions (dev );
17791779 cond_resched ();
17801780 }
17811781 }
17821782
1783- while (down_trylock (& cmd -> pages_sem )) {
1783+ while (down_trylock (& cmd -> vars . pages_sem )) {
17841784 mlx5_cmd_trigger_completions (dev );
17851785 cond_resched ();
17861786 }
17871787
17881788 /* Unlock cmdif */
1789- up (& cmd -> pages_sem );
1790- for (i = 0 ; i < cmd -> max_reg_cmds ; i ++ )
1791- up (& cmd -> sem );
1789+ up (& cmd -> vars . pages_sem );
1790+ for (i = 0 ; i < cmd -> vars . max_reg_cmds ; i ++ )
1791+ up (& cmd -> vars . sem );
17921792}
17931793
17941794static struct mlx5_cmd_msg * alloc_msg (struct mlx5_core_dev * dev , int in_size ,
@@ -1858,7 +1858,7 @@ static int cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out,
18581858 /* atomic context may not sleep */
18591859 if (callback )
18601860 return - EINVAL ;
1861- down (& dev -> cmd .throttle_sem );
1861+ down (& dev -> cmd .vars . throttle_sem );
18621862 }
18631863
18641864 pages_queue = is_manage_pages (in );
@@ -1903,7 +1903,7 @@ static int cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out,
19031903 free_msg (dev , inb );
19041904out_up :
19051905 if (throttle_op )
1906- up (& dev -> cmd .throttle_sem );
1906+ up (& dev -> cmd .vars . throttle_sem );
19071907 return err ;
19081908}
19091909
@@ -2213,30 +2213,30 @@ int mlx5_cmd_init(struct mlx5_core_dev *dev)
22132213 goto err_free_pool ;
22142214
22152215 cmd_l = ioread32be (& dev -> iseg -> cmdq_addr_l_sz ) & 0xff ;
2216- cmd -> log_sz = cmd_l >> 4 & 0xf ;
2217- cmd -> log_stride = cmd_l & 0xf ;
2218- if (1 << cmd -> log_sz > MLX5_MAX_COMMANDS ) {
2216+ cmd -> vars . log_sz = cmd_l >> 4 & 0xf ;
2217+ cmd -> vars . log_stride = cmd_l & 0xf ;
2218+ if (1 << cmd -> vars . log_sz > MLX5_MAX_COMMANDS ) {
22192219 mlx5_core_err (dev , "firmware reports too many outstanding commands %d\n" ,
2220- 1 << cmd -> log_sz );
2220+ 1 << cmd -> vars . log_sz );
22212221 err = - EINVAL ;
22222222 goto err_free_page ;
22232223 }
22242224
2225- if (cmd -> log_sz + cmd -> log_stride > MLX5_ADAPTER_PAGE_SHIFT ) {
2225+ if (cmd -> vars . log_sz + cmd -> vars . log_stride > MLX5_ADAPTER_PAGE_SHIFT ) {
22262226 mlx5_core_err (dev , "command queue size overflow\n" );
22272227 err = - EINVAL ;
22282228 goto err_free_page ;
22292229 }
22302230
22312231 cmd -> state = MLX5_CMDIF_STATE_DOWN ;
22322232 cmd -> checksum_disabled = 1 ;
2233- cmd -> max_reg_cmds = (1 << cmd -> log_sz ) - 1 ;
2234- cmd -> bitmask = (1UL << cmd -> max_reg_cmds ) - 1 ;
2233+ cmd -> vars . max_reg_cmds = (1 << cmd -> vars . log_sz ) - 1 ;
2234+ cmd -> vars . bitmask = (1UL << cmd -> vars . max_reg_cmds ) - 1 ;
22352235
2236- cmd -> cmdif_rev = ioread32be (& dev -> iseg -> cmdif_rev_fw_sub ) >> 16 ;
2237- if (cmd -> cmdif_rev > CMD_IF_REV ) {
2236+ cmd -> vars . cmdif_rev = ioread32be (& dev -> iseg -> cmdif_rev_fw_sub ) >> 16 ;
2237+ if (cmd -> vars . cmdif_rev > CMD_IF_REV ) {
22382238 mlx5_core_err (dev , "driver does not support command interface version. driver %d, firmware %d\n" ,
2239- CMD_IF_REV , cmd -> cmdif_rev );
2239+ CMD_IF_REV , cmd -> vars . cmdif_rev );
22402240 err = - EOPNOTSUPP ;
22412241 goto err_free_page ;
22422242 }
@@ -2246,9 +2246,9 @@ int mlx5_cmd_init(struct mlx5_core_dev *dev)
22462246 for (i = 0 ; i < MLX5_CMD_OP_MAX ; i ++ )
22472247 spin_lock_init (& cmd -> stats [i ].lock );
22482248
2249- sema_init (& cmd -> sem , cmd -> max_reg_cmds );
2250- sema_init (& cmd -> pages_sem , 1 );
2251- sema_init (& cmd -> throttle_sem , DIV_ROUND_UP (cmd -> max_reg_cmds , 2 ));
2249+ sema_init (& cmd -> vars . sem , cmd -> vars . max_reg_cmds );
2250+ sema_init (& cmd -> vars . pages_sem , 1 );
2251+ sema_init (& cmd -> vars . throttle_sem , DIV_ROUND_UP (cmd -> vars . max_reg_cmds , 2 ));
22522252
22532253 cmd_h = (u32 )((u64 )(cmd -> dma ) >> 32 );
22542254 cmd_l = (u32 )(cmd -> dma );
0 commit comments