@@ -213,13 +213,12 @@ void cxl_dpa_debug(struct seq_file *file, struct cxl_dev_state *cxlds)
213213{
214214 struct resource * p1 , * p2 ;
215215
216- down_read (& cxl_dpa_rwsem );
216+ guard ( rwsem_read ) (& cxl_dpa_rwsem );
217217 for (p1 = cxlds -> dpa_res .child ; p1 ; p1 = p1 -> sibling ) {
218218 __cxl_dpa_debug (file , p1 , 0 );
219219 for (p2 = p1 -> child ; p2 ; p2 = p2 -> sibling )
220220 __cxl_dpa_debug (file , p2 , 1 );
221221 }
222- up_read (& cxl_dpa_rwsem );
223222}
224223EXPORT_SYMBOL_NS_GPL (cxl_dpa_debug , "CXL" );
225224
@@ -281,9 +280,8 @@ static void __cxl_dpa_release(struct cxl_endpoint_decoder *cxled)
281280
282281static void cxl_dpa_release (void * cxled )
283282{
284- down_write (& cxl_dpa_rwsem );
283+ guard ( rwsem_write ) (& cxl_dpa_rwsem );
285284 __cxl_dpa_release (cxled );
286- up_write (& cxl_dpa_rwsem );
287285}
288286
289287/*
@@ -530,14 +528,11 @@ EXPORT_SYMBOL_NS_GPL(devm_cxl_dpa_reserve, "CXL");
530528
531529resource_size_t cxl_dpa_size (struct cxl_endpoint_decoder * cxled )
532530{
533- resource_size_t size = 0 ;
534-
535- down_read (& cxl_dpa_rwsem );
531+ guard (rwsem_read )(& cxl_dpa_rwsem );
536532 if (cxled -> dpa_res )
537- size = resource_size (cxled -> dpa_res );
538- up_read (& cxl_dpa_rwsem );
533+ return resource_size (cxled -> dpa_res );
539534
540- return size ;
535+ return 0 ;
541536}
542537
543538resource_size_t cxl_dpa_resource_start (struct cxl_endpoint_decoder * cxled )
@@ -555,35 +550,27 @@ int cxl_dpa_free(struct cxl_endpoint_decoder *cxled)
555550{
556551 struct cxl_port * port = cxled_to_port (cxled );
557552 struct device * dev = & cxled -> cxld .dev ;
558- int rc ;
559553
560- down_write (& cxl_dpa_rwsem );
561- if (!cxled -> dpa_res ) {
562- rc = 0 ;
563- goto out ;
564- }
554+ guard (rwsem_write )(& cxl_dpa_rwsem );
555+ if (!cxled -> dpa_res )
556+ return 0 ;
565557 if (cxled -> cxld .region ) {
566558 dev_dbg (dev , "decoder assigned to: %s\n" ,
567559 dev_name (& cxled -> cxld .region -> dev ));
568- rc = - EBUSY ;
569- goto out ;
560+ return - EBUSY ;
570561 }
571562 if (cxled -> cxld .flags & CXL_DECODER_F_ENABLE ) {
572563 dev_dbg (dev , "decoder enabled\n" );
573- rc = - EBUSY ;
574- goto out ;
564+ return - EBUSY ;
575565 }
576566 if (cxled -> cxld .id != port -> hdm_end ) {
577567 dev_dbg (dev , "expected decoder%d.%d\n" , port -> id ,
578568 port -> hdm_end );
579- rc = - EBUSY ;
580- goto out ;
569+ return - EBUSY ;
581570 }
571+
582572 devm_cxl_dpa_release (cxled );
583- rc = 0 ;
584- out :
585- up_write (& cxl_dpa_rwsem );
586- return rc ;
573+ return 0 ;
587574}
588575
589576int cxl_dpa_set_part (struct cxl_endpoint_decoder * cxled ,
@@ -616,36 +603,32 @@ int cxl_dpa_set_part(struct cxl_endpoint_decoder *cxled,
616603 return 0 ;
617604}
618605
619- int cxl_dpa_alloc (struct cxl_endpoint_decoder * cxled , unsigned long long size )
606+ static int __cxl_dpa_alloc (struct cxl_endpoint_decoder * cxled , unsigned long long size )
620607{
621608 struct cxl_memdev * cxlmd = cxled_to_memdev (cxled );
622- struct cxl_port * port = cxled_to_port (cxled );
623609 struct cxl_dev_state * cxlds = cxlmd -> cxlds ;
624610 struct device * dev = & cxled -> cxld .dev ;
625611 struct resource * res , * prev = NULL ;
626612 resource_size_t start , avail , skip , skip_start ;
627613 struct resource * p , * last ;
628- int part , rc ;
614+ int part ;
629615
630- down_write (& cxl_dpa_rwsem );
616+ guard ( rwsem_write ) (& cxl_dpa_rwsem );
631617 if (cxled -> cxld .region ) {
632618 dev_dbg (dev , "decoder attached to %s\n" ,
633619 dev_name (& cxled -> cxld .region -> dev ));
634- rc = - EBUSY ;
635- goto out ;
620+ return - EBUSY ;
636621 }
637622
638623 if (cxled -> cxld .flags & CXL_DECODER_F_ENABLE ) {
639624 dev_dbg (dev , "decoder enabled\n" );
640- rc = - EBUSY ;
641- goto out ;
625+ return - EBUSY ;
642626 }
643627
644628 part = cxled -> part ;
645629 if (part < 0 ) {
646630 dev_dbg (dev , "partition not set\n" );
647- rc = - EBUSY ;
648- goto out ;
631+ return - EBUSY ;
649632 }
650633
651634 res = & cxlds -> part [part ].res ;
@@ -685,14 +668,18 @@ int cxl_dpa_alloc(struct cxl_endpoint_decoder *cxled, unsigned long long size)
685668 if (size > avail ) {
686669 dev_dbg (dev , "%pa exceeds available %s capacity: %pa\n" , & size ,
687670 res -> name , & avail );
688- rc = - ENOSPC ;
689- goto out ;
671+ return - ENOSPC ;
690672 }
691673
692- rc = __cxl_dpa_reserve (cxled , start , size , skip );
693- out :
694- up_write (& cxl_dpa_rwsem );
674+ return __cxl_dpa_reserve (cxled , start , size , skip );
675+ }
676+
677+ int cxl_dpa_alloc (struct cxl_endpoint_decoder * cxled , unsigned long long size )
678+ {
679+ struct cxl_port * port = cxled_to_port (cxled );
680+ int rc ;
695681
682+ rc = __cxl_dpa_alloc (cxled , size );
696683 if (rc )
697684 return rc ;
698685
0 commit comments