Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

qlcnic: Simplify DMA setting

As stated in [1], dma_set_mask() with a 64-bit mask will never fail if
dev->dma_mask is non-NULL.
So, if it fails, the 32 bits case will also fail for the same reason.

So qlcnic_set_dma_mask(), (in qlcnic_main.c) can be simplified a lot and
inlined directly in its only caller.

If dma_set_mask_and_coherent() succeeds, 'pci_using_dac' is known to be 1.
So it can be removed from all the calling chain.

qlcnic_setup_netdev() can finally be simplified as-well.

[1]: https://lkml.org/lkml/2021/6/7/398

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/4996ab0337d62ec6a54b2edf234cd5ced4b4d7ad.1641649611.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Christophe JAILLET and committed by
Jakub Kicinski
a72dc199 009e4ee3

+19 -38
+1 -1
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
··· 1698 1698 int qlcnic_set_vxlan_parsing(struct qlcnic_adapter *adapter, u16 port); 1699 1699 int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter); 1700 1700 int qlcnic_read_mac_addr(struct qlcnic_adapter *); 1701 - int qlcnic_setup_netdev(struct qlcnic_adapter *, struct net_device *, int); 1701 + int qlcnic_setup_netdev(struct qlcnic_adapter *, struct net_device *); 1702 1702 void qlcnic_set_netdev_features(struct qlcnic_adapter *, 1703 1703 struct qlcnic_esw_func_cfg *); 1704 1704 void qlcnic_sriov_vf_set_multi(struct net_device *);
+1 -1
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
··· 609 609 int qlcnic_83xx_flash_read32(struct qlcnic_adapter *, u32, u8 *, int); 610 610 int qlcnic_83xx_lockless_flash_read32(struct qlcnic_adapter *, 611 611 u32, u8 *, int); 612 - int qlcnic_83xx_init(struct qlcnic_adapter *, int); 612 + int qlcnic_83xx_init(struct qlcnic_adapter *); 613 613 int qlcnic_83xx_idc_ready_state_entry(struct qlcnic_adapter *); 614 614 void qlcnic_83xx_idc_poll_dev_state(struct work_struct *); 615 615 void qlcnic_83xx_idc_exit(struct qlcnic_adapter *);
+2 -2
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
··· 2432 2432 qlcnic_set_sds_ring_count(adapter, rx_cnt); 2433 2433 } 2434 2434 2435 - int qlcnic_83xx_init(struct qlcnic_adapter *adapter, int pci_using_dac) 2435 + int qlcnic_83xx_init(struct qlcnic_adapter *adapter) 2436 2436 { 2437 2437 struct qlcnic_hardware_context *ahw = adapter->ahw; 2438 2438 int err = 0; ··· 2466 2466 goto exit; 2467 2467 2468 2468 if (qlcnic_sriov_vf_check(adapter)) { 2469 - err = qlcnic_sriov_vf_init(adapter, pci_using_dac); 2469 + err = qlcnic_sriov_vf_init(adapter); 2470 2470 if (err) 2471 2471 goto detach_mbx; 2472 2472 else
+10 -28
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
··· 2258 2258 } 2259 2259 2260 2260 int 2261 - qlcnic_setup_netdev(struct qlcnic_adapter *adapter, struct net_device *netdev, 2262 - int pci_using_dac) 2261 + qlcnic_setup_netdev(struct qlcnic_adapter *adapter, struct net_device *netdev) 2263 2262 { 2264 2263 int err; 2265 2264 struct pci_dev *pdev = adapter->pdev; ··· 2277 2278 2278 2279 netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM | 2279 2280 NETIF_F_IPV6_CSUM | NETIF_F_GRO | 2280 - NETIF_F_HW_VLAN_CTAG_RX); 2281 + NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HIGHDMA); 2281 2282 netdev->vlan_features |= (NETIF_F_SG | NETIF_F_IP_CSUM | 2282 - NETIF_F_IPV6_CSUM); 2283 + NETIF_F_IPV6_CSUM | NETIF_F_HIGHDMA); 2283 2284 2284 2285 if (QLCNIC_IS_TSO_CAPABLE(adapter)) { 2285 2286 netdev->features |= (NETIF_F_TSO | NETIF_F_TSO6); 2286 2287 netdev->vlan_features |= (NETIF_F_TSO | NETIF_F_TSO6); 2287 - } 2288 - 2289 - if (pci_using_dac) { 2290 - netdev->features |= NETIF_F_HIGHDMA; 2291 - netdev->vlan_features |= NETIF_F_HIGHDMA; 2292 2288 } 2293 2289 2294 2290 if (qlcnic_vlan_tx_check(adapter)) ··· 2330 2336 if (err) { 2331 2337 dev_err(&pdev->dev, "failed to register net device\n"); 2332 2338 return err; 2333 - } 2334 - 2335 - return 0; 2336 - } 2337 - 2338 - static int qlcnic_set_dma_mask(struct pci_dev *pdev, int *pci_using_dac) 2339 - { 2340 - if (!dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64))) 2341 - *pci_using_dac = 1; 2342 - else if (!dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32))) 2343 - *pci_using_dac = 0; 2344 - else { 2345 - dev_err(&pdev->dev, "Unable to set DMA mask, aborting\n"); 2346 - return -EIO; 2347 2339 } 2348 2340 2349 2341 return 0; ··· 2421 2441 struct net_device *netdev = NULL; 2422 2442 struct qlcnic_adapter *adapter = NULL; 2423 2443 struct qlcnic_hardware_context *ahw; 2424 - int err, pci_using_dac = -1; 2425 2444 char board_name[QLCNIC_MAX_BOARD_NAME_LEN + 19]; /* MAC + ": " + name */ 2445 + int err; 2426 2446 2427 2447 err = pci_enable_device(pdev); 2428 2448 if (err) ··· 2433 2453 goto err_out_disable_pdev; 2434 2454 } 2435 2455 2436 - err = qlcnic_set_dma_mask(pdev, &pci_using_dac); 2437 - if (err) 2456 + err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); 2457 + if (err) { 2458 + dev_err(&pdev->dev, "Unable to set DMA mask, aborting\n"); 2438 2459 goto err_out_disable_pdev; 2460 + } 2439 2461 2440 2462 err = pci_request_regions(pdev, qlcnic_driver_name); 2441 2463 if (err) ··· 2551 2569 } else if (qlcnic_83xx_check(adapter)) { 2552 2570 qlcnic_83xx_check_vf(adapter, ent); 2553 2571 adapter->portnum = adapter->ahw->pci_func; 2554 - err = qlcnic_83xx_init(adapter, pci_using_dac); 2572 + err = qlcnic_83xx_init(adapter); 2555 2573 if (err) { 2556 2574 switch (err) { 2557 2575 case -ENOTRECOVERABLE: ··· 2615 2633 if (adapter->portnum == 0) 2616 2634 qlcnic_set_drv_version(adapter); 2617 2635 2618 - err = qlcnic_setup_netdev(adapter, netdev, pci_using_dac); 2636 + err = qlcnic_setup_netdev(adapter, netdev); 2619 2637 if (err) 2620 2638 goto err_out_disable_mbx_intr; 2621 2639
+1 -1
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
··· 188 188 void qlcnic_sriov_cleanup(struct qlcnic_adapter *); 189 189 void __qlcnic_sriov_cleanup(struct qlcnic_adapter *); 190 190 void qlcnic_sriov_vf_register_map(struct qlcnic_hardware_context *); 191 - int qlcnic_sriov_vf_init(struct qlcnic_adapter *, int); 191 + int qlcnic_sriov_vf_init(struct qlcnic_adapter *); 192 192 void qlcnic_sriov_vf_set_ops(struct qlcnic_adapter *); 193 193 int qlcnic_sriov_func_to_index(struct qlcnic_adapter *, u8); 194 194 void qlcnic_sriov_handle_bc_event(struct qlcnic_adapter *, u32);
+4 -5
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
··· 525 525 return 0; 526 526 } 527 527 528 - static int qlcnic_sriov_setup_vf(struct qlcnic_adapter *adapter, 529 - int pci_using_dac) 528 + static int qlcnic_sriov_setup_vf(struct qlcnic_adapter *adapter) 530 529 { 531 530 int err; 532 531 ··· 570 571 if (err) 571 572 goto err_out_send_channel_term; 572 573 573 - err = qlcnic_setup_netdev(adapter, adapter->netdev, pci_using_dac); 574 + err = qlcnic_setup_netdev(adapter, adapter->netdev); 574 575 if (err) 575 576 goto err_out_send_channel_term; 576 577 ··· 613 614 return 0; 614 615 } 615 616 616 - int qlcnic_sriov_vf_init(struct qlcnic_adapter *adapter, int pci_using_dac) 617 + int qlcnic_sriov_vf_init(struct qlcnic_adapter *adapter) 617 618 { 618 619 struct qlcnic_hardware_context *ahw = adapter->ahw; 619 620 int err; ··· 630 631 if (err) 631 632 return err; 632 633 633 - err = qlcnic_sriov_setup_vf(adapter, pci_using_dac); 634 + err = qlcnic_sriov_setup_vf(adapter); 634 635 if (err) 635 636 return err; 636 637