| .. | .. |
|---|
| 49 | 49 | |
|---|
| 50 | 50 | static struct kmem_cache *fnic_sgl_cache[FNIC_SGL_NUM_CACHES]; |
|---|
| 51 | 51 | static struct kmem_cache *fnic_io_req_cache; |
|---|
| 52 | | -LIST_HEAD(fnic_list); |
|---|
| 53 | | -DEFINE_SPINLOCK(fnic_list_lock); |
|---|
| 52 | +static LIST_HEAD(fnic_list); |
|---|
| 53 | +static DEFINE_SPINLOCK(fnic_list_lock); |
|---|
| 54 | 54 | |
|---|
| 55 | 55 | /* Supported devices by fnic module */ |
|---|
| 56 | 56 | static struct pci_device_id fnic_id_table[] = { |
|---|
| .. | .. |
|---|
| 68 | 68 | unsigned int fnic_log_level; |
|---|
| 69 | 69 | module_param(fnic_log_level, int, S_IRUGO|S_IWUSR); |
|---|
| 70 | 70 | MODULE_PARM_DESC(fnic_log_level, "bit mask of fnic logging levels"); |
|---|
| 71 | + |
|---|
| 72 | + |
|---|
| 73 | +unsigned int io_completions = FNIC_DFLT_IO_COMPLETIONS; |
|---|
| 74 | +module_param(io_completions, int, S_IRUGO|S_IWUSR); |
|---|
| 75 | +MODULE_PARM_DESC(io_completions, "Max CQ entries to process at a time"); |
|---|
| 71 | 76 | |
|---|
| 72 | 77 | unsigned int fnic_trace_max_pages = 16; |
|---|
| 73 | 78 | module_param(fnic_trace_max_pages, uint, S_IRUGO|S_IWUSR); |
|---|
| .. | .. |
|---|
| 115 | 120 | .this_id = -1, |
|---|
| 116 | 121 | .cmd_per_lun = 3, |
|---|
| 117 | 122 | .can_queue = FNIC_DFLT_IO_REQ, |
|---|
| 118 | | - .use_clustering = ENABLE_CLUSTERING, |
|---|
| 119 | 123 | .sg_tablesize = FNIC_MAX_SG_DESC_CNT, |
|---|
| 120 | 124 | .max_sectors = 0xffff, |
|---|
| 121 | 125 | .shost_attrs = fnic_attrs, |
|---|
| .. | .. |
|---|
| 178 | 182 | switch (port_speed) { |
|---|
| 179 | 183 | case DCEM_PORTSPEED_10G: |
|---|
| 180 | 184 | fc_host_speed(shost) = FC_PORTSPEED_10GBIT; |
|---|
| 185 | + break; |
|---|
| 186 | + case DCEM_PORTSPEED_20G: |
|---|
| 187 | + fc_host_speed(shost) = FC_PORTSPEED_20GBIT; |
|---|
| 181 | 188 | break; |
|---|
| 182 | 189 | case DCEM_PORTSPEED_25G: |
|---|
| 183 | 190 | fc_host_speed(shost) = FC_PORTSPEED_25GBIT; |
|---|
| .. | .. |
|---|
| 436 | 443 | default: |
|---|
| 437 | 444 | /* Using intr for notification for INTx/MSI-X */ |
|---|
| 438 | 445 | break; |
|---|
| 439 | | - }; |
|---|
| 446 | + } |
|---|
| 440 | 447 | } |
|---|
| 441 | 448 | |
|---|
| 442 | 449 | static int fnic_dev_wait(struct vnic_dev *vdev, |
|---|
| .. | .. |
|---|
| 501 | 508 | } |
|---|
| 502 | 509 | |
|---|
| 503 | 510 | /* Clean up completed IOs and FCS frames */ |
|---|
| 504 | | - fnic_wq_copy_cmpl_handler(fnic, -1); |
|---|
| 511 | + fnic_wq_copy_cmpl_handler(fnic, io_completions); |
|---|
| 505 | 512 | fnic_wq_cmpl_handler(fnic, -1); |
|---|
| 506 | 513 | fnic_rq_cmpl_handler(fnic, -1); |
|---|
| 507 | 514 | |
|---|
| .. | .. |
|---|
| 545 | 552 | |
|---|
| 546 | 553 | static void fnic_set_vlan(struct fnic *fnic, u16 vlan_id) |
|---|
| 547 | 554 | { |
|---|
| 548 | | - u16 old_vlan; |
|---|
| 549 | | - old_vlan = vnic_dev_set_default_vlan(fnic->vdev, vlan_id); |
|---|
| 555 | + vnic_dev_set_default_vlan(fnic->vdev, vlan_id); |
|---|
| 550 | 556 | } |
|---|
| 551 | 557 | |
|---|
| 552 | 558 | static int fnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) |
|---|
| .. | .. |
|---|
| 579 | 585 | |
|---|
| 580 | 586 | host->transportt = fnic_fc_transport; |
|---|
| 581 | 587 | |
|---|
| 582 | | - err = fnic_stats_debugfs_init(fnic); |
|---|
| 583 | | - if (err) { |
|---|
| 584 | | - shost_printk(KERN_ERR, fnic->lport->host, |
|---|
| 585 | | - "Failed to initialize debugfs for stats\n"); |
|---|
| 586 | | - fnic_stats_debugfs_remove(fnic); |
|---|
| 587 | | - } |
|---|
| 588 | + fnic_stats_debugfs_init(fnic); |
|---|
| 588 | 589 | |
|---|
| 589 | 590 | /* Setup PCI resources */ |
|---|
| 590 | 591 | pci_set_drvdata(pdev, fnic); |
|---|
| .. | .. |
|---|
| 611 | 612 | * limitation for the device. Try 64-bit first, and |
|---|
| 612 | 613 | * fail to 32-bit. |
|---|
| 613 | 614 | */ |
|---|
| 614 | | - err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64)); |
|---|
| 615 | + err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); |
|---|
| 615 | 616 | if (err) { |
|---|
| 616 | | - err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); |
|---|
| 617 | + err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); |
|---|
| 617 | 618 | if (err) { |
|---|
| 618 | 619 | shost_printk(KERN_ERR, fnic->lport->host, |
|---|
| 619 | 620 | "No usable DMA configuration " |
|---|
| 620 | 621 | "aborting\n"); |
|---|
| 621 | | - goto err_out_release_regions; |
|---|
| 622 | | - } |
|---|
| 623 | | - err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); |
|---|
| 624 | | - if (err) { |
|---|
| 625 | | - shost_printk(KERN_ERR, fnic->lport->host, |
|---|
| 626 | | - "Unable to obtain 32-bit DMA " |
|---|
| 627 | | - "for consistent allocations, aborting.\n"); |
|---|
| 628 | | - goto err_out_release_regions; |
|---|
| 629 | | - } |
|---|
| 630 | | - } else { |
|---|
| 631 | | - err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); |
|---|
| 632 | | - if (err) { |
|---|
| 633 | | - shost_printk(KERN_ERR, fnic->lport->host, |
|---|
| 634 | | - "Unable to obtain 64-bit DMA " |
|---|
| 635 | | - "for consistent allocations, aborting.\n"); |
|---|
| 636 | 622 | goto err_out_release_regions; |
|---|
| 637 | 623 | } |
|---|
| 638 | 624 | } |
|---|
| .. | .. |
|---|
| 666 | 652 | goto err_out_iounmap; |
|---|
| 667 | 653 | } |
|---|
| 668 | 654 | |
|---|
| 655 | + err = vnic_dev_cmd_init(fnic->vdev); |
|---|
| 656 | + if (err) { |
|---|
| 657 | + shost_printk(KERN_ERR, fnic->lport->host, |
|---|
| 658 | + "vnic_dev_cmd_init() returns %d, aborting\n", |
|---|
| 659 | + err); |
|---|
| 660 | + goto err_out_vnic_unregister; |
|---|
| 661 | + } |
|---|
| 662 | + |
|---|
| 669 | 663 | err = fnic_dev_wait(fnic->vdev, vnic_dev_open, |
|---|
| 670 | | - vnic_dev_open_done, 0); |
|---|
| 664 | + vnic_dev_open_done, CMD_OPENF_RQ_ENABLE_THEN_POST); |
|---|
| 671 | 665 | if (err) { |
|---|
| 672 | 666 | shost_printk(KERN_ERR, fnic->lport->host, |
|---|
| 673 | 667 | "vNIC dev open failed, aborting.\n"); |
|---|
| 674 | | - goto err_out_vnic_unregister; |
|---|
| 668 | + goto err_out_dev_cmd_deinit; |
|---|
| 675 | 669 | } |
|---|
| 676 | 670 | |
|---|
| 677 | 671 | err = vnic_dev_init(fnic->vdev, 0); |
|---|
| .. | .. |
|---|
| 813 | 807 | |
|---|
| 814 | 808 | /* allocate RQ buffers and post them to RQ*/ |
|---|
| 815 | 809 | for (i = 0; i < fnic->rq_count; i++) { |
|---|
| 810 | + vnic_rq_enable(&fnic->rq[i]); |
|---|
| 816 | 811 | err = vnic_rq_fill(&fnic->rq[i], fnic_alloc_rq_frame); |
|---|
| 817 | 812 | if (err) { |
|---|
| 818 | 813 | shost_printk(KERN_ERR, fnic->lport->host, |
|---|
| .. | .. |
|---|
| 887 | 882 | /* Enable all queues */ |
|---|
| 888 | 883 | for (i = 0; i < fnic->raw_wq_count; i++) |
|---|
| 889 | 884 | vnic_wq_enable(&fnic->wq[i]); |
|---|
| 890 | | - for (i = 0; i < fnic->rq_count; i++) |
|---|
| 891 | | - vnic_rq_enable(&fnic->rq[i]); |
|---|
| 892 | 885 | for (i = 0; i < fnic->wq_copy_count; i++) |
|---|
| 893 | 886 | vnic_wq_copy_enable(&fnic->wq_copy[i]); |
|---|
| 894 | 887 | |
|---|
| 895 | 888 | fc_fabric_login(lp); |
|---|
| 896 | | - |
|---|
| 897 | | - vnic_dev_enable(fnic->vdev); |
|---|
| 898 | 889 | |
|---|
| 899 | 890 | err = fnic_request_intr(fnic); |
|---|
| 900 | 891 | if (err) { |
|---|
| .. | .. |
|---|
| 902 | 893 | "Unable to request irq.\n"); |
|---|
| 903 | 894 | goto err_out_free_exch_mgr; |
|---|
| 904 | 895 | } |
|---|
| 896 | + |
|---|
| 897 | + vnic_dev_enable(fnic->vdev); |
|---|
| 905 | 898 | |
|---|
| 906 | 899 | for (i = 0; i < fnic->intr_count; i++) |
|---|
| 907 | 900 | vnic_intr_unmask(&fnic->intr[i]); |
|---|
| .. | .. |
|---|
| 931 | 924 | fnic_clear_intr_mode(fnic); |
|---|
| 932 | 925 | err_out_dev_close: |
|---|
| 933 | 926 | vnic_dev_close(fnic->vdev); |
|---|
| 927 | +err_out_dev_cmd_deinit: |
|---|
| 934 | 928 | err_out_vnic_unregister: |
|---|
| 935 | 929 | vnic_dev_unregister(fnic->vdev); |
|---|
| 936 | 930 | err_out_iounmap: |
|---|