@@ -190,15 +190,23 @@ static int efa_request_doorbell_bar(struct efa_dev *dev)
190190{
191191 u8 db_bar_idx = dev -> dev_attr .db_bar ;
192192 struct pci_dev * pdev = dev -> pdev ;
193- int bars ;
193+ int pci_mem_bars ;
194+ int db_bar ;
194195 int err ;
195196
196- if (!(BIT (db_bar_idx ) & EFA_BASE_BAR_MASK )) {
197- bars = pci_select_bars (pdev , IORESOURCE_MEM ) & BIT (db_bar_idx );
197+ db_bar = BIT (db_bar_idx );
198+ if (!(db_bar & EFA_BASE_BAR_MASK )) {
199+ pci_mem_bars = pci_select_bars (pdev , IORESOURCE_MEM );
200+ if (db_bar & ~pci_mem_bars ) {
201+ dev_err (& pdev -> dev ,
202+ "Doorbells BAR unavailable. Requested %#x, available %#x\n" ,
203+ db_bar , pci_mem_bars );
204+ return - ENODEV ;
205+ }
198206
199- err = pci_request_selected_regions (pdev , bars , DRV_MODULE_NAME );
207+ err = pci_request_selected_regions (pdev , db_bar , DRV_MODULE_NAME );
200208 if (err ) {
201- dev_err (& dev -> pdev -> dev ,
209+ dev_err (& pdev -> dev ,
202210 "pci_request_selected_regions for bar %d failed %d\n" ,
203211 db_bar_idx , err );
204212 return err ;
@@ -531,7 +539,7 @@ static struct efa_dev *efa_probe_device(struct pci_dev *pdev)
531539{
532540 struct efa_com_dev * edev ;
533541 struct efa_dev * dev ;
534- int bars ;
542+ int pci_mem_bars ;
535543 int err ;
536544
537545 err = pci_enable_device_mem (pdev );
@@ -556,8 +564,14 @@ static struct efa_dev *efa_probe_device(struct pci_dev *pdev)
556564 dev -> pdev = pdev ;
557565 xa_init (& dev -> cqs_xa );
558566
559- bars = pci_select_bars (pdev , IORESOURCE_MEM ) & EFA_BASE_BAR_MASK ;
560- err = pci_request_selected_regions (pdev , bars , DRV_MODULE_NAME );
567+ pci_mem_bars = pci_select_bars (pdev , IORESOURCE_MEM );
568+ if (EFA_BASE_BAR_MASK & ~pci_mem_bars ) {
569+ dev_err (& pdev -> dev , "BARs unavailable. Requested %#x, available %#x\n" ,
570+ (int )EFA_BASE_BAR_MASK , pci_mem_bars );
571+ err = - ENODEV ;
572+ goto err_ibdev_destroy ;
573+ }
574+ err = pci_request_selected_regions (pdev , EFA_BASE_BAR_MASK , DRV_MODULE_NAME );
561575 if (err ) {
562576 dev_err (& pdev -> dev , "pci_request_selected_regions failed %d\n" ,
563577 err );
0 commit comments