@@ -2749,15 +2749,25 @@ static bool cxl_is_hpa_in_range(u64 hpa, struct cxl_region *cxlr, int pos)
27492749 return false;
27502750}
27512751
2752- static u64 cxl_dpa_to_hpa (u64 dpa , struct cxl_region * cxlr ,
2753- struct cxl_endpoint_decoder * cxled )
2752+ u64 cxl_dpa_to_hpa (struct cxl_region * cxlr , const struct cxl_memdev * cxlmd ,
2753+ u64 dpa )
27542754{
27552755 u64 dpa_offset , hpa_offset , bits_upper , mask_upper , hpa ;
27562756 struct cxl_region_params * p = & cxlr -> params ;
2757- int pos = cxled -> pos ;
2757+ struct cxl_endpoint_decoder * cxled = NULL ;
27582758 u16 eig = 0 ;
27592759 u8 eiw = 0 ;
2760+ int pos ;
2761+
2762+ for (int i = 0 ; i < p -> nr_targets ; i ++ ) {
2763+ cxled = p -> targets [i ];
2764+ if (cxlmd == cxled_to_memdev (cxled ))
2765+ break ;
2766+ }
2767+ if (!cxled || cxlmd != cxled_to_memdev (cxled ))
2768+ return ULLONG_MAX ;
27602769
2770+ pos = cxled -> pos ;
27612771 ways_to_eiw (p -> interleave_ways , & eiw );
27622772 granularity_to_eig (p -> interleave_granularity , & eig );
27632773
@@ -2797,23 +2807,6 @@ static u64 cxl_dpa_to_hpa(u64 dpa, struct cxl_region *cxlr,
27972807 return hpa ;
27982808}
27992809
2800- u64 cxl_trace_hpa (struct cxl_region * cxlr , const struct cxl_memdev * cxlmd ,
2801- u64 dpa )
2802- {
2803- struct cxl_region_params * p = & cxlr -> params ;
2804- struct cxl_endpoint_decoder * cxled = NULL ;
2805-
2806- for (int i = 0 ; i < p -> nr_targets ; i ++ ) {
2807- cxled = p -> targets [i ];
2808- if (cxlmd == cxled_to_memdev (cxled ))
2809- break ;
2810- }
2811- if (!cxled || cxlmd != cxled_to_memdev (cxled ))
2812- return ULLONG_MAX ;
2813-
2814- return cxl_dpa_to_hpa (dpa , cxlr , cxled );
2815- }
2816-
28172810static struct lock_class_key cxl_pmem_region_key ;
28182811
28192812static int cxl_pmem_region_alloc (struct cxl_region * cxlr )
0 commit comments