.. | .. |
---|
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: |
---|