On 12/2/20 7:25 AM, Brian King wrote:
> On 12/1/20 6:53 PM, Tyrel Datwyler wrote:
>> +static int ibmvfc_register_scsi_channel(struct ibmvfc_host *vhost,
>> +                              int index)
>> +{
>> +    struct device *dev = vhost->dev;
>> +    struct vio_dev *vdev = to_vio_dev(dev);
>> +    struct ibmvfc_sub_queue *scrq = &vhost->scsi_scrqs.scrqs[index];
>> +    int rc = -ENOMEM;
>> +
>> +    ENTER;
>> +
>> +    scrq->msgs = (struct ibmvfc_sub_crq *)get_zeroed_page(GFP_KERNEL);
>> +    if (!scrq->msgs)
>> +            return rc;
>> +
>> +    scrq->size = PAGE_SIZE / sizeof(*scrq->msgs);
>> +    scrq->msg_token = dma_map_single(dev, scrq->msgs, PAGE_SIZE,
>> +                                     DMA_BIDIRECTIONAL);
>> +
>> +    if (dma_mapping_error(dev, scrq->msg_token))
>> +            goto dma_map_failed;
>> +
>> +    rc = h_reg_sub_crq(vdev->unit_address, scrq->msg_token, PAGE_SIZE,
>> +                       &scrq->cookie, &scrq->hw_irq);
>> +
>> +    if (rc) {
>> +            dev_warn(dev, "Error registering sub-crq: %d\n", rc);
>> +            dev_warn(dev, "Firmware may not support MQ\n");
> 
> Will this now get logged everywhere this new driver runs if the firmware
> does not support sub CRQs? Is there something better that could be done
> here to only log this for a true error and not just because a new driver
> is running with an older firmware release?

I suppose we can guess if the rc is H_PARAMETER that sub-crqs are probably not
supported and do a dev_warn_once() for the no MQ support message. H_PARAMETER
could mean other things though so we still need to log the failure in my 
opinion.

-Tyrel

> 
>> +            goto reg_failed;
>> +    }
>> +
>> +    scrq->hwq_id = index;
>> +    scrq->vhost = vhost;
>> +
>> +    LEAVE;
>> +    return 0;
>> +
>> +reg_failed:
>> +    dma_unmap_single(dev, scrq->msg_token, PAGE_SIZE, DMA_BIDIRECTIONAL);
>> +dma_map_failed:
>> +    free_page((unsigned long)scrq->msgs);
>> +    LEAVE;
>> +    return rc;
>> +}
>> +
> 
> 
> 

Reply via email to