@@ -74,6 +74,14 @@ static u32 get_function(u16 func_id, bool ec_function)
74
74
return (u32 )func_id | (ec_function << 16 );
75
75
}
76
76
77
+ static u16 func_id_to_type (struct mlx5_core_dev * dev , u16 func_id , bool ec_function )
78
+ {
79
+ if (!func_id )
80
+ return mlx5_core_is_ecpf (dev ) && !ec_function ? MLX5_HOST_PF : MLX5_PF ;
81
+
82
+ return MLX5_VF ;
83
+ }
84
+
77
85
static struct rb_root * page_root_per_function (struct mlx5_core_dev * dev , u32 function )
78
86
{
79
87
struct rb_root * root ;
@@ -332,6 +340,7 @@ static int give_pages(struct mlx5_core_dev *dev, u16 func_id, int npages,
332
340
u32 out [MLX5_ST_SZ_DW (manage_pages_out )] = {0 };
333
341
int inlen = MLX5_ST_SZ_BYTES (manage_pages_in );
334
342
int notify_fail = event ;
343
+ u16 func_type ;
335
344
u64 addr ;
336
345
int err ;
337
346
u32 * in ;
@@ -383,11 +392,9 @@ static int give_pages(struct mlx5_core_dev *dev, u16 func_id, int npages,
383
392
goto out_dropped ;
384
393
}
385
394
395
+ func_type = func_id_to_type (dev , func_id , ec_function );
396
+ dev -> priv .page_counters [func_type ] += npages ;
386
397
dev -> priv .fw_pages += npages ;
387
- if (func_id )
388
- dev -> priv .vfs_pages += npages ;
389
- else if (mlx5_core_is_ecpf (dev ) && !ec_function )
390
- dev -> priv .host_pf_pages += npages ;
391
398
392
399
mlx5_core_dbg (dev , "npages %d, ec_function %d, func_id 0x%x, err %d\n" ,
393
400
npages , ec_function , func_id , err );
@@ -414,6 +421,7 @@ static void release_all_pages(struct mlx5_core_dev *dev, u16 func_id,
414
421
struct rb_root * root ;
415
422
struct rb_node * p ;
416
423
int npages = 0 ;
424
+ u16 func_type ;
417
425
418
426
root = xa_load (& dev -> priv .page_root_xa , function );
419
427
if (WARN_ON_ONCE (!root ))
@@ -428,11 +436,9 @@ static void release_all_pages(struct mlx5_core_dev *dev, u16 func_id,
428
436
free_fwp (dev , fwp , fwp -> free_count );
429
437
}
430
438
439
+ func_type = func_id_to_type (dev , func_id , ec_function );
440
+ dev -> priv .page_counters [func_type ] -= npages ;
431
441
dev -> priv .fw_pages -= npages ;
432
- if (func_id )
433
- dev -> priv .vfs_pages -= npages ;
434
- else if (mlx5_core_is_ecpf (dev ) && !ec_function )
435
- dev -> priv .host_pf_pages -= npages ;
436
442
437
443
mlx5_core_dbg (dev , "npages %d, ec_function %d, func_id 0x%x\n" ,
438
444
npages , ec_function , func_id );
@@ -498,6 +504,7 @@ static int reclaim_pages(struct mlx5_core_dev *dev, u16 func_id, int npages,
498
504
int outlen = MLX5_ST_SZ_BYTES (manage_pages_out );
499
505
u32 in [MLX5_ST_SZ_DW (manage_pages_in )] = {};
500
506
int num_claimed ;
507
+ u16 func_type ;
501
508
u32 * out ;
502
509
int err ;
503
510
int i ;
@@ -549,11 +556,9 @@ static int reclaim_pages(struct mlx5_core_dev *dev, u16 func_id, int npages,
549
556
if (nclaimed )
550
557
* nclaimed = num_claimed ;
551
558
559
+ func_type = func_id_to_type (dev , func_id , ec_function );
560
+ dev -> priv .page_counters [func_type ] -= num_claimed ;
552
561
dev -> priv .fw_pages -= num_claimed ;
553
- if (func_id )
554
- dev -> priv .vfs_pages -= num_claimed ;
555
- else if (mlx5_core_is_ecpf (dev ) && !ec_function )
556
- dev -> priv .host_pf_pages -= num_claimed ;
557
562
558
563
out_free :
559
564
kvfree (out );
@@ -706,12 +711,12 @@ int mlx5_reclaim_startup_pages(struct mlx5_core_dev *dev)
706
711
WARN (dev -> priv .fw_pages ,
707
712
"FW pages counter is %d after reclaiming all pages\n" ,
708
713
dev -> priv .fw_pages );
709
- WARN (dev -> priv .vfs_pages ,
714
+ WARN (dev -> priv .page_counters [ MLX5_VF ] ,
710
715
"VFs FW pages counter is %d after reclaiming all pages\n" ,
711
- dev -> priv .vfs_pages );
712
- WARN (dev -> priv .host_pf_pages ,
716
+ dev -> priv .page_counters [ MLX5_VF ] );
717
+ WARN (dev -> priv .page_counters [ MLX5_HOST_PF ] ,
713
718
"External host PF FW pages counter is %d after reclaiming all pages\n" ,
714
- dev -> priv .host_pf_pages );
719
+ dev -> priv .page_counters [ MLX5_HOST_PF ] );
715
720
716
721
return 0 ;
717
722
}
0 commit comments