Tyrel Datwyler <[email protected]> writes:
> On 4/8/26 10:07 AM, Dave Marquardt via B4 Relay wrote:
>> From: Dave Marquardt <[email protected]>
>
>> - Add VFC_NOOP command support
>> - Add KUnit tests for VFC_NOOP command
>> ---
>> drivers/scsi/ibmvscsi/ibmvfc.c | 23 +++++++++++++----------
>> drivers/scsi/ibmvscsi/ibmvfc.h | 13 +++++++++++++
>> drivers/scsi/ibmvscsi/ibmvfc_kunit.c | 27 +++++++++++++++++++++++++++
>> 3 files changed, 53 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
>> index 3ac376ba2c62..808301fa452d 100644
>> --- a/drivers/scsi/ibmvscsi/ibmvfc.c
>> +++ b/drivers/scsi/ibmvscsi/ibmvfc.c
>> @@ -189,13 +189,6 @@ static long h_reg_sub_crq(unsigned long unit_address,
>> unsigned long ioba,
>> return rc;
>> }
>>
>> -static int ibmvfc_check_caps(struct ibmvfc_host *vhost, unsigned long
>> cap_flags)
>> -{
>> - u64 host_caps = be64_to_cpu(vhost->login_buf->resp.capabilities);
>> -
>> - return (host_caps & cap_flags) ? 1 : 0;
>> -}
>> -
>
> It appears you are moving this to ibmvfc.h? Is there reasoning outside making
> it
> visible to kunit?
That's exactly why I'm moving this to ibmvfc.h. Alternatively I could
export this routine. I'm okay doing that if you prefer it.
>> static struct ibmvfc_fcp_cmd_iu *ibmvfc_get_fcp_iu(struct ibmvfc_host
>> *vhost,
>> struct ibmvfc_cmd *vfc_cmd)
>> {
>> @@ -1512,7 +1505,9 @@ static void ibmvfc_set_login_info(struct ibmvfc_host
>> *vhost)
>> login_info->flags |= cpu_to_be16(IBMVFC_CLIENT_MIGRATED);
>>
>> login_info->max_cmds = cpu_to_be32(max_cmds);
>> - login_info->capabilities = cpu_to_be64(IBMVFC_CAN_MIGRATE |
>> IBMVFC_CAN_SEND_VF_WWPN);
>> + login_info->capabilities =
>> + cpu_to_be64(IBMVFC_CAN_MIGRATE | IBMVFC_CAN_SEND_VF_WWPN |
>> + IBMVFC_CAN_USE_NOOP_CMD);
>>
>> if (vhost->mq_enabled || vhost->using_channels)
>> login_info->capabilities |=
>> cpu_to_be64(IBMVFC_CAN_USE_CHANNELS);
>> @@ -3461,8 +3456,8 @@ EXPORT_SYMBOL_IF_KUNIT(ibmvfc_handle_async);
>> * @evt_doneq: Event done queue
>> *
>> **/
>> -static void ibmvfc_handle_crq(struct ibmvfc_crq *crq, struct ibmvfc_host
>> *vhost,
>> - struct list_head *evt_doneq)
>> +VISIBLE_IF_KUNIT void ibmvfc_handle_crq(struct ibmvfc_crq *crq, struct
>> ibmvfc_host *vhost,
>> + struct list_head *evt_doneq)
>> {
>> long rc;
>> struct ibmvfc_event *evt = (struct ibmvfc_event
>> *)be64_to_cpu(crq->ioba);
>> @@ -3520,6 +3515,13 @@ static void ibmvfc_handle_crq(struct ibmvfc_crq *crq,
>> struct ibmvfc_host *vhost,
>> if (crq->format == IBMVFC_ASYNC_EVENT)
>> return;
>>
>> + if (crq->format == IBMVFC_VFC_NOOP) {
>> + if (!ibmvfc_check_caps(vhost, IBMVFC_SUPPORT_NOOP_CMD))
>> + dev_err(vhost->dev,
>> + "Received unexpected NOOP command from
>> partner\n");
>
> If we have a misbahaved VIOS partner we may want to ratelimit this dev_err so
> that we don't flood the log. Probably a corner case, but I don't think it
> hurts.
Okay, I'll add rate limiting in v2.
-Dave