@@ -556,36 +556,38 @@ static const struct vdpa_config_ops snet_config_ops = {
556
556
static int psnet_open_pf_bar (struct pci_dev * pdev , struct psnet * psnet )
557
557
{
558
558
char * name ;
559
- int ret , i , mask = 0 ;
559
+ unsigned short i ;
560
+ bool bars_found = false;
561
+
562
+ name = devm_kasprintf (& pdev -> dev , GFP_KERNEL , "psnet[%s]-bars" , pci_name (pdev ));
563
+ if (!name )
564
+ return - ENOMEM ;
565
+
560
566
/* We don't know which BAR will be used to communicate..
561
567
* We will map every bar with len > 0.
562
568
*
563
569
* Later, we will discover the BAR and unmap all other BARs.
564
570
*/
565
571
for (i = 0 ; i < PCI_STD_NUM_BARS ; i ++ ) {
566
- if (pci_resource_len (pdev , i ))
567
- mask |= (1 << i );
568
- }
572
+ void __iomem * io ;
569
573
570
- /* No BAR can be used.. */
571
- if (!mask ) {
572
- SNET_ERR (pdev , "Failed to find a PCI BAR\n" );
573
- return - ENODEV ;
574
- }
574
+ if (pci_resource_len (pdev , i ) == 0 )
575
+ continue ;
575
576
576
- name = devm_kasprintf (& pdev -> dev , GFP_KERNEL , "psnet[%s]-bars" , pci_name (pdev ));
577
- if (!name )
578
- return - ENOMEM ;
577
+ io = pcim_iomap_region (pdev , i , name );
578
+ if (IS_ERR (io )) {
579
+ SNET_ERR (pdev , "Failed to request and map PCI BARs\n" );
580
+ return PTR_ERR (io );
581
+ }
579
582
580
- ret = pcim_iomap_regions (pdev , mask , name );
581
- if (ret ) {
582
- SNET_ERR (pdev , "Failed to request and map PCI BARs\n" );
583
- return ret ;
583
+ psnet -> bars [i ] = io ;
584
+ bars_found = true;
584
585
}
585
586
586
- for (i = 0 ; i < PCI_STD_NUM_BARS ; i ++ ) {
587
- if (mask & (1 << i ))
588
- psnet -> bars [i ] = pcim_iomap_table (pdev )[i ];
587
+ /* No BAR can be used.. */
588
+ if (!bars_found ) {
589
+ SNET_ERR (pdev , "Failed to find a PCI BAR\n" );
590
+ return - ENODEV ;
589
591
}
590
592
591
593
return 0 ;
@@ -594,20 +596,20 @@ static int psnet_open_pf_bar(struct pci_dev *pdev, struct psnet *psnet)
594
596
static int snet_open_vf_bar (struct pci_dev * pdev , struct snet * snet )
595
597
{
596
598
char * name ;
597
- int ret ;
599
+ void __iomem * io ;
598
600
599
601
name = devm_kasprintf (& pdev -> dev , GFP_KERNEL , "snet[%s]-bars" , pci_name (pdev ));
600
602
if (!name )
601
603
return - ENOMEM ;
602
604
603
605
/* Request and map BAR */
604
- ret = pcim_iomap_regions (pdev , BIT ( snet -> psnet -> cfg .vf_bar ) , name );
605
- if (ret ) {
606
+ io = pcim_iomap_region (pdev , snet -> psnet -> cfg .vf_bar , name );
607
+ if (IS_ERR ( io ) ) {
606
608
SNET_ERR (pdev , "Failed to request and map PCI BAR for a VF\n" );
607
- return ret ;
609
+ return PTR_ERR ( io ) ;
608
610
}
609
611
610
- snet -> bar = pcim_iomap_table ( pdev )[ snet -> psnet -> cfg . vf_bar ] ;
612
+ snet -> bar = io ;
611
613
612
614
return 0 ;
613
615
}
@@ -656,15 +658,12 @@ static int psnet_detect_bar(struct psnet *psnet, u32 off)
656
658
657
659
static void psnet_unmap_unused_bars (struct pci_dev * pdev , struct psnet * psnet )
658
660
{
659
- int i , mask = 0 ;
661
+ unsigned short i ;
660
662
661
663
for (i = 0 ; i < PCI_STD_NUM_BARS ; i ++ ) {
662
664
if (psnet -> bars [i ] && i != psnet -> barno )
663
- mask |= ( 1 << i );
665
+ pcim_iounmap_region ( pdev , i );
664
666
}
665
-
666
- if (mask )
667
- pcim_iounmap_regions (pdev , mask );
668
667
}
669
668
670
669
/* Read SNET config from PCI BAR */
0 commit comments