@@ -271,7 +271,7 @@ int idxd_wq_map_portal(struct idxd_wq *wq)
271271 resource_size_t start ;
272272
273273 start = pci_resource_start (pdev , IDXD_WQ_BAR );
274- start = start + wq -> id * IDXD_PORTAL_SIZE ;
274+ start += idxd_get_wq_portal_full_offset ( wq -> id , IDXD_PORTAL_LIMITED ) ;
275275
276276 wq -> dportal = devm_ioremap (dev , start , IDXD_PORTAL_SIZE );
277277 if (!wq -> dportal )
@@ -295,7 +295,7 @@ void idxd_wq_disable_cleanup(struct idxd_wq *wq)
295295 int i , wq_offset ;
296296
297297 lockdep_assert_held (& idxd -> dev_lock );
298- memset (& wq -> wqcfg , 0 , sizeof ( wq -> wqcfg ) );
298+ memset (wq -> wqcfg , 0 , idxd -> wqcfg_size );
299299 wq -> type = IDXD_WQT_NONE ;
300300 wq -> size = 0 ;
301301 wq -> group = NULL ;
@@ -304,8 +304,8 @@ void idxd_wq_disable_cleanup(struct idxd_wq *wq)
304304 clear_bit (WQ_FLAG_DEDICATED , & wq -> flags );
305305 memset (wq -> name , 0 , WQ_NAME_SIZE );
306306
307- for (i = 0 ; i < 8 ; i ++ ) {
308- wq_offset = idxd -> wqcfg_offset + wq -> id * 32 + i * sizeof ( u32 );
307+ for (i = 0 ; i < WQCFG_STRIDES ( idxd ) ; i ++ ) {
308+ wq_offset = WQCFG_OFFSET ( idxd , wq -> id , i );
309309 iowrite32 (0 , idxd -> reg_base + wq_offset );
310310 dev_dbg (dev , "WQ[%d][%d][%#x]: %#x\n" ,
311311 wq -> id , i , wq_offset ,
@@ -539,33 +539,32 @@ static int idxd_wq_config_write(struct idxd_wq *wq)
539539 if (!wq -> group )
540540 return 0 ;
541541
542- memset (& wq -> wqcfg , 0 , sizeof ( union wqcfg ) );
542+ memset (wq -> wqcfg , 0 , idxd -> wqcfg_size );
543543
544544 /* byte 0-3 */
545- wq -> wqcfg . wq_size = wq -> size ;
545+ wq -> wqcfg -> wq_size = wq -> size ;
546546
547547 if (wq -> size == 0 ) {
548548 dev_warn (dev , "Incorrect work queue size: 0\n" );
549549 return - EINVAL ;
550550 }
551551
552552 /* bytes 4-7 */
553- wq -> wqcfg . wq_thresh = wq -> threshold ;
553+ wq -> wqcfg -> wq_thresh = wq -> threshold ;
554554
555555 /* byte 8-11 */
556- wq -> wqcfg .priv = !!(wq -> type == IDXD_WQT_KERNEL );
557- wq -> wqcfg .mode = 1 ;
558-
559- wq -> wqcfg .priority = wq -> priority ;
556+ wq -> wqcfg -> priv = !!(wq -> type == IDXD_WQT_KERNEL );
557+ wq -> wqcfg -> mode = 1 ;
558+ wq -> wqcfg -> priority = wq -> priority ;
560559
561560 /* bytes 12-15 */
562- wq -> wqcfg . max_xfer_shift = ilog2 (wq -> max_xfer_bytes );
563- wq -> wqcfg . max_batch_shift = ilog2 (wq -> max_batch_size );
561+ wq -> wqcfg -> max_xfer_shift = ilog2 (wq -> max_xfer_bytes );
562+ wq -> wqcfg -> max_batch_shift = ilog2 (wq -> max_batch_size );
564563
565564 dev_dbg (dev , "WQ %d CFGs\n" , wq -> id );
566- for (i = 0 ; i < 8 ; i ++ ) {
567- wq_offset = idxd -> wqcfg_offset + wq -> id * 32 + i * sizeof ( u32 );
568- iowrite32 (wq -> wqcfg . bits [i ], idxd -> reg_base + wq_offset );
565+ for (i = 0 ; i < WQCFG_STRIDES ( idxd ) ; i ++ ) {
566+ wq_offset = WQCFG_OFFSET ( idxd , wq -> id , i );
567+ iowrite32 (wq -> wqcfg -> bits [i ], idxd -> reg_base + wq_offset );
569568 dev_dbg (dev , "WQ[%d][%d][%#x]: %#x\n" ,
570569 wq -> id , i , wq_offset ,
571570 ioread32 (idxd -> reg_base + wq_offset ));
0 commit comments