>  create mode 100644 drivers/scsi/qla2xxx/qla_bottom.c
>  create mode 100644 drivers/scsi/qla2xxx/qla_mq.c
>  create mode 100644 drivers/scsi/qla2xxx/qla_top.c

What's the point of three new fairly small files, two of them very
oddly named?  Can't we keep the code together by logical groups?

> +     /* distill these fields down to 'online=0/1'
> +      * ha->flags.eeh_busy
> +      * ha->flags.pci_channel_io_perm_failure
> +      * base_vha->loop_state
> +      */
> +     uint32_t online:1;
> +     /* move vha->flags.difdix_supported here */
> +     uint32_t difdix_supported:1;
> +     uint32_t delete_in_progress:1;

These probably should be atomic bitops.

> +#define QLA_VHA_MARK_BUSY(__vha, __bail) do {                \
> +     atomic_inc(&__vha->vref_count);                 \
> +     mb();                                           \
> +     if (__vha->flags.delete_progress) {             \
> +             atomic_dec(&__vha->vref_count);         \
> +             __bail = 1;                             \
> +     } else {                                        \
> +             __bail = 0;                             \
> +     }                                               \
>  } while (0)

Something like this should be an inline function, not a macro
that returns through an argument.

(and move to lower case it while at it, please).

Btw, the way vref_count is used looks incredibly buggy, instead
of the busy wait just add a waie queue to sleep on in
qla24xx_deallocate_vp_id.

> +     QLA_QPAIR_MARK_BUSY(qpair, bail);
> +     if (unlikely(bail))
> +             return NULL;
> +
> +     sp = mempool_alloc(qpair->srb_mempool, flag);
> +     if (!sp)
> +             goto done;
> +
> +     memset(sp, 0, sizeof(*sp));
> +     sp->fcport = fcport;
> +     sp->iocbs = 1;

FYI, the blk-mq model would be to allocate the srps as part of the
scsi_cmd by setting the cmd_size field in the host template.  Note
that this is also supported for the non-blk-mq path.

> +     qpair->delete_in_progress = 1;
> +     while (atomic_read(&qpair->ref_count))
> +             msleep(500);

Please use a waitqueue instead of a busy wait here as well.

> +int ql2xmqsupport;
> +module_param(ql2xmqsupport, int, S_IRUGO);
> +MODULE_PARM_DESC(ql2xmqsupport,
> +             "Enable on demand multiple queue pairs support "
> +             "Default is 0 for no support. "
> +             "Set it to 1 to turn on mq qpair support.");

Why isn't this enabled by default?

> +             ha->queue_pair_map = kzalloc(sizeof(struct qla_qpair *)
> +                     * ha->max_qpairs, GFP_KERNEL);

Use kcalloc instead.
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to