@@ -2835,6 +2835,38 @@ static void irdma_free_iwmr(struct irdma_mr *iwmr)
2835
2835
kfree (iwmr );
2836
2836
}
2837
2837
2838
+ static int irdma_reg_user_mr_type_qp (struct irdma_mem_reg_req req ,
2839
+ struct ib_udata * udata ,
2840
+ struct irdma_mr * iwmr )
2841
+ {
2842
+ struct irdma_device * iwdev = to_iwdev (iwmr -> ibmr .device );
2843
+ struct irdma_pbl * iwpbl = & iwmr -> iwpbl ;
2844
+ struct irdma_ucontext * ucontext = NULL ;
2845
+ unsigned long flags ;
2846
+ bool use_pbles ;
2847
+ u32 total ;
2848
+ int err ;
2849
+
2850
+ total = req .sq_pages + req .rq_pages + 1 ;
2851
+ if (total > iwmr -> page_cnt )
2852
+ return - EINVAL ;
2853
+
2854
+ total = req .sq_pages + req .rq_pages ;
2855
+ use_pbles = total > 2 ;
2856
+ err = irdma_handle_q_mem (iwdev , & req , iwpbl , use_pbles );
2857
+ if (err )
2858
+ return err ;
2859
+
2860
+ ucontext = rdma_udata_to_drv_context (udata , struct irdma_ucontext ,
2861
+ ibucontext );
2862
+ spin_lock_irqsave (& ucontext -> qp_reg_mem_list_lock , flags );
2863
+ list_add_tail (& iwpbl -> list , & ucontext -> qp_reg_mem_list );
2864
+ iwpbl -> on_list = true;
2865
+ spin_unlock_irqrestore (& ucontext -> qp_reg_mem_list_lock , flags );
2866
+
2867
+ return 0 ;
2868
+ }
2869
+
2838
2870
/**
2839
2871
* irdma_reg_user_mr - Register a user memory region
2840
2872
* @pd: ptr of pd
@@ -2890,23 +2922,10 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
2890
2922
2891
2923
switch (req .reg_type ) {
2892
2924
case IRDMA_MEMREG_TYPE_QP :
2893
- total = req .sq_pages + req .rq_pages + shadow_pgcnt ;
2894
- if (total > iwmr -> page_cnt ) {
2895
- err = - EINVAL ;
2896
- goto error ;
2897
- }
2898
- total = req .sq_pages + req .rq_pages ;
2899
- use_pbles = (total > 2 );
2900
- err = irdma_handle_q_mem (iwdev , & req , iwpbl , use_pbles );
2925
+ err = irdma_reg_user_mr_type_qp (req , udata , iwmr );
2901
2926
if (err )
2902
2927
goto error ;
2903
2928
2904
- ucontext = rdma_udata_to_drv_context (udata , struct irdma_ucontext ,
2905
- ibucontext );
2906
- spin_lock_irqsave (& ucontext -> qp_reg_mem_list_lock , flags );
2907
- list_add_tail (& iwpbl -> list , & ucontext -> qp_reg_mem_list );
2908
- iwpbl -> on_list = true;
2909
- spin_unlock_irqrestore (& ucontext -> qp_reg_mem_list_lock , flags );
2910
2929
break ;
2911
2930
case IRDMA_MEMREG_TYPE_CQ :
2912
2931
if (iwdev -> rf -> sc_dev .hw_attrs .uk_attrs .feature_flags & IRDMA_FEATURE_CQ_RESIZE )
0 commit comments