From patchwork Fri Apr 5 23:04:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Smart X-Patchwork-Id: 10887949 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3F0D01390 for ; Fri, 5 Apr 2019 23:04:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 29C5D286D7 for ; Fri, 5 Apr 2019 23:04:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1E34B28B35; Fri, 5 Apr 2019 23:04:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B944A286D7 for ; Fri, 5 Apr 2019 23:04:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726310AbfDEXEd (ORCPT ); Fri, 5 Apr 2019 19:04:33 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:38918 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726124AbfDEXEd (ORCPT ); Fri, 5 Apr 2019 19:04:33 -0400 Received: by mail-pf1-f196.google.com with SMTP id i17so930349pfo.6 for ; Fri, 05 Apr 2019 16:04:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=y1P9ji9RXVZdgdkmrihTp3i1dOpiIX8wHnIecW7HXAI=; b=mGE+s+CgvjHsntE5I/LZO69RzZSgpfpYN2xaU4usg+IpePVFOQP76BAxE/tvvZ+FyG DR1CTomzj0HrlUkjpZ2SJjquCmDBc4XO+PEaog7I0sQelKVOy5qvyWqmt3Mf2+HFzWYt C6BgSrBrMRG6NwX7Z/AYF9u+BuI/BIjjOvfWCLyWHfYlL/DL7Jnaib6Musu05RFXltq9 klcpw4gdGh7bcS6I8g9+M9J8zFZDZ/v6ZK+GvJ+xje+TSAr3nL6kJ6PYLDzfSUNYcEbT 3g7inX9qSfNszShSnVSeogZ+EfOOH5mC/SEqpHNytlkBYXzQ/bxgowWkF3wsuqou/p8t S3hQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=y1P9ji9RXVZdgdkmrihTp3i1dOpiIX8wHnIecW7HXAI=; b=pyi+BYfjvMDAvLjY+d3JsNMf2w0dqKOjRt+BQl9c+N8gO1pi2QsauoK2RWUZjamX4y 2jjQIZ1bvLsizfdB6AIuJ5RRGJ0QhTof94vJShEo/U5tY1RNYRlBctuO8g5/aqo/547C gTJzZXuvzD4GqmA5CH+Dz4oPbGk+u8lXrgnLdU9kP+UmDvrh5aDawlwk1QFvSBVru2Ig RtBAjU6b/kXVn+9uS22WQN+qyRap0hO4ffBoEpMMtv77qSRIcSzEjLEL3LRBm2SIy+4x gnl1yZy7rZL9/FOSy+fZZma72V/BfYKn3XShFJj1tO79cwaj+1MNVKlMGI0pQQxjpK7d Jg4Q== X-Gm-Message-State: APjAAAU/hJGFQHz8KqFu3KaaYyX7QFoKthm8Hh3jHBn/IPqL15219FnR 9D4x30mz1QfCkuVCk2mb0/fMBJ5K X-Google-Smtp-Source: APXvYqwCPRuBWL9+/KN19T66QKerQ+SdLrrEbJkn4yTf0RR6A2XQQHfd8kC5OP0AJAEVrbUzYI3ouw== X-Received: by 2002:a63:e915:: with SMTP id i21mr14618491pgh.297.1554505472121; Fri, 05 Apr 2019 16:04:32 -0700 (PDT) Received: from os42.localdomain ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id j67sm30805068pfc.72.2019.04.05.16.04.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 05 Apr 2019 16:04:31 -0700 (PDT) From: James Smart To: linux-scsi@vger.kernel.org Cc: muneendra.kumar@broadcom.com, James Smart Subject: [PATCH 1/4] scsi fc: add FPIN ELS definition Date: Fri, 5 Apr 2019 16:04:20 -0700 Message-Id: <20190405230423.4316-2-jsmart2021@gmail.com> X-Mailer: git-send-email 2.13.7 In-Reply-To: <20190405230423.4316-1-jsmart2021@gmail.com> References: <20190405230423.4316-1-jsmart2021@gmail.com> Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP T11 has introduced a new Fabric Notifications mechanism whereby the fabric can notify a port of events occurring in the fabric. The notifications are given by the FPIN ELS. Add the FPIN ELS definitions to the kernel. Signed-off-by: James Smart Reviewed-by: Ewan D. Milne --- include/uapi/scsi/fc/fc_els.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/include/uapi/scsi/fc/fc_els.h b/include/uapi/scsi/fc/fc_els.h index b7e0a5ed40de..a81c53508cc6 100644 --- a/include/uapi/scsi/fc/fc_els.h +++ b/include/uapi/scsi/fc/fc_els.h @@ -52,6 +52,7 @@ enum fc_els_cmd { ELS_RRQ = 0x12, /* reinstate recovery qualifier */ ELS_REC = 0x13, /* read exchange concise */ ELS_SRR = 0x14, /* sequence retransmission request */ + ELS_FPIN = 0x16, /* Fabric Performance Impact Notification */ ELS_PRLI = 0x20, /* process login */ ELS_PRLO = 0x21, /* process logout */ ELS_SCN = 0x22, /* state change notification */ @@ -119,6 +120,7 @@ enum fc_els_cmd { [ELS_RRQ] = "RRQ", \ [ELS_REC] = "REC", \ [ELS_SRR] = "SRR", \ + [ELS_FPIN] = "FPIN", \ [ELS_PRLI] = "PRLI", \ [ELS_PRLO] = "PRLO", \ [ELS_SCN] = "SCN", \ @@ -829,4 +831,35 @@ enum fc_els_clid_ic { ELS_CLID_IC_LIP = 8, /* receiving LIP */ }; + +/* + * Fabric Notification Descriptor Tag values + */ +enum fc_fn_dtag { + ELS_FN_DTAG_LNK_INTEGRITY = 0x00020001, /* Link Integrity */ + ELS_FN_DTAG_PEER_CONGEST = 0x00020003, /* Peer Congestion */ + ELS_FN_DTAG_CONGESTION = 0x00020004, /* Congestion */ +}; + +/* + * Fabric Notification Descriptor + */ +struct fc_fn_desc { + __be32 fn_desc_tag; /* Notification Descriptor Tag */ + __be32 fn_desc_value_len; /* Length of Descriptor Value field + * (in bytes) + */ + __u8 fn_desc_value[0]; /* Descriptor Value */ +}; + +/* + * ELS_FPIN - Fabric Performance Impact Notification + */ +struct fc_els_fpin { + __u8 fpin_cmd; /* command (0x16) */ + __u8 fpin_zero[3]; /* specified as zero - part of cmd */ + __be32 fpin_desc_cnt; /* count of descriptors */ + struct fc_fn_desc fpin_desc[0]; /* Descriptor list */ +}; + #endif /* _FC_ELS_H_ */ From patchwork Fri Apr 5 23:04:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Smart X-Patchwork-Id: 10887951 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6AC651390 for ; Fri, 5 Apr 2019 23:04:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 54412286D7 for ; Fri, 5 Apr 2019 23:04:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4619F28B35; Fri, 5 Apr 2019 23:04:35 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A1B6B286D7 for ; Fri, 5 Apr 2019 23:04:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726360AbfDEXEe (ORCPT ); Fri, 5 Apr 2019 19:04:34 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:34447 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726124AbfDEXEd (ORCPT ); Fri, 5 Apr 2019 19:04:33 -0400 Received: by mail-pg1-f195.google.com with SMTP id v12so3820270pgq.1 for ; Fri, 05 Apr 2019 16:04:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Y4D2HB19WTdoWK9hqQYIPRUylkEuXA7nzRGNCOJ75VE=; b=uB5M7Hg6rRYF+dj66J9mCMro7uzn59qalhalISKWR3KvP6wGa9WY/LquoRmZSavtgb jn1BaK2xO6X3rUU/h0wPJ4CX3YKYcEN5hXT9ZFGKXzaOh4XvIPyzCbZQ4Xvw0aWJ4+Q3 YjAt+gf7K8lUwrSWC4nZS+7iJvpmiL0JGBQhqQd8eWbfXsL8YnbGEkECpqrv+do/DfIB vhBiLwhU3raWl2Vu9ddXzp+0Mh8DmKBSZv4BNqyeX/kbREjM+rKJctmynuDbPmyqEd3I VbgFr0dQYyviAucoxYLN5SOkVN+aDpaKq2xj6Ps2mME5zArx3gxiWLRVK2P4pHN1oGz+ 0QzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Y4D2HB19WTdoWK9hqQYIPRUylkEuXA7nzRGNCOJ75VE=; b=TDsKKkXfD4rGs78qJE2kfOzT0k1QU1G11GgrcC9VC404Dq5JvfoBC40ejFFMsgf0tT 2mZJpLV9xLJ2RASMcoQJjxQSBVtWon1TGyXZXzJdxs1bQXe87GyANY/B2ClvJZ6u4ZKu M//FX+J5aiAmR8jU9jHE7jalb6OryDkDCZ68PynTwzd0odBJOACUiT52paVeTKt+Yx78 G7d7imaGlXJgxQvnbvi5g7kIrhEcgSnrMjUL7Bssoj+OuDd52Mv9lvtlCyBDlS2L9Iuf /FHGbXWRtzAVC8kbJYQnD01MRCXU6/YwpDpBjAPAjaefO/ykpTYqPLvWk03S9s3T8Yqf dEpg== X-Gm-Message-State: APjAAAUjrrwHX19/5ySJOPYq3Lz2miAXlR4eNdD1nIQVLetpHq68fOzX caEJkQ++baftFGsjIddq6LrlZ6+L X-Google-Smtp-Source: APXvYqxesLmQ7nZo/RqizH+I75kMX2sD7qvVKYEOTWOCao2c0SothJEkZW9YnNi8/lo13lMAIWrscg== X-Received: by 2002:a65:64cf:: with SMTP id t15mr14318879pgv.322.1554505473040; Fri, 05 Apr 2019 16:04:33 -0700 (PDT) Received: from os42.localdomain ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id j67sm30805068pfc.72.2019.04.05.16.04.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 05 Apr 2019 16:04:32 -0700 (PDT) From: James Smart To: linux-scsi@vger.kernel.org Cc: muneendra.kumar@broadcom.com, James Smart Subject: [PATCH 2/4] scsi_transport_fc: refactor event posting routines Date: Fri, 5 Apr 2019 16:04:21 -0700 Message-Id: <20190405230423.4316-3-jsmart2021@gmail.com> X-Mailer: git-send-email 2.13.7 In-Reply-To: <20190405230423.4316-1-jsmart2021@gmail.com> References: <20190405230423.4316-1-jsmart2021@gmail.com> Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP There are two routines generating transport events that do the same thing with only a couple of values set differently. Refactor so there's a single routine doing the netlink operations to send the event. All the differences are passed as arguments. Export the symbol so the generic routine can be called by llds. Modify the existing two event routines to use the helper. Signed-off-by: James Smart Reviewed-by: Ewan D. Milne --- drivers/scsi/scsi_transport_fc.c | 100 ++++++++++++++++----------------------- include/scsi/scsi_transport_fc.h | 11 +++-- 2 files changed, 49 insertions(+), 62 deletions(-) diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c index d7035270d274..9bea4dfbe128 100644 --- a/drivers/scsi/scsi_transport_fc.c +++ b/drivers/scsi/scsi_transport_fc.c @@ -523,20 +523,23 @@ fc_get_event_number(void) } EXPORT_SYMBOL(fc_get_event_number); - /** - * fc_host_post_event - called to post an even on an fc_host. + * fc_host_post_fc_event - routine to do the work of posting an event + * on an fc_host. * @shost: host the event occurred on * @event_number: fc event number obtained from get_fc_event_number() * @event_code: fc_host event being posted - * @event_data: 32bits of data for the event being posted + * @data_len: amount, in bytes, of event data + * @data_buf: pointer to event data + * @vendor_id: value for Vendor id * * Notes: * This routine assumes no locks are held on entry. */ void -fc_host_post_event(struct Scsi_Host *shost, u32 event_number, - enum fc_host_event_code event_code, u32 event_data) +fc_host_post_fc_event(struct Scsi_Host *shost, u32 event_number, + enum fc_host_event_code event_code, + u32 data_len, char *data_buf, u64 vendor_id) { struct sk_buff *skb; struct nlmsghdr *nlh; @@ -545,12 +548,15 @@ fc_host_post_event(struct Scsi_Host *shost, u32 event_number, u32 len; int err; + if (!data_buf || data_len < 4) + data_len = 0; + if (!scsi_nl_sock) { err = -ENOENT; goto send_fail; } - len = FC_NL_MSGALIGN(sizeof(*event)); + len = FC_NL_MSGALIGN(sizeof(*event) + data_len); skb = nlmsg_new(len, GFP_KERNEL); if (!skb) { @@ -568,12 +574,13 @@ fc_host_post_event(struct Scsi_Host *shost, u32 event_number, INIT_SCSI_NL_HDR(&event->snlh, SCSI_NL_TRANSPORT_FC, FC_NL_ASYNC_EVENT, len); event->seconds = ktime_get_real_seconds(); - event->vendor_id = 0; + event->vendor_id = vendor_id; event->host_no = shost->host_no; - event->event_datalen = sizeof(u32); /* bytes */ + event->event_datalen = data_len; /* bytes */ event->event_num = event_number; event->event_code = event_code; - event->event_data = event_data; + if (data_len) + memcpy(&event->event_data, data_buf, data_len); nlmsg_multicast(scsi_nl_sock, skb, 0, SCSI_NL_GRP_FC_EVENTS, GFP_KERNEL); @@ -586,14 +593,35 @@ fc_host_post_event(struct Scsi_Host *shost, u32 event_number, printk(KERN_WARNING "%s: Dropped Event : host %d %s data 0x%08x - err %d\n", __func__, shost->host_no, - (name) ? name : "", event_data, err); + (name) ? name : "", + (data_len) ? *((u32 *)data_buf) : 0xFFFFFFFF, err); return; } +EXPORT_SYMBOL(fc_host_post_fc_event); + +/** + * fc_host_post_event - called to post an even on an fc_host. + * @shost: host the event occurred on + * @event_number: fc event number obtained from get_fc_event_number() + * @event_code: fc_host event being posted + * @event_data: 32bits of data for the event being posted + * + * Notes: + * This routine assumes no locks are held on entry. + */ +void +fc_host_post_event(struct Scsi_Host *shost, u32 event_number, + enum fc_host_event_code event_code, u32 event_data) +{ + fc_host_post_fc_event(shost, event_number, event_code, + (u32)sizeof(u32), (char *)&event_data, 0); +} EXPORT_SYMBOL(fc_host_post_event); /** - * fc_host_post_vendor_event - called to post a vendor unique event on an fc_host + * fc_host_post_vendor_event - called to post a vendor unique event + * on an fc_host * @shost: host the event occurred on * @event_number: fc event number obtained from get_fc_event_number() * @data_len: amount, in bytes, of vendor unique data @@ -607,58 +635,12 @@ void fc_host_post_vendor_event(struct Scsi_Host *shost, u32 event_number, u32 data_len, char * data_buf, u64 vendor_id) { - struct sk_buff *skb; - struct nlmsghdr *nlh; - struct fc_nl_event *event; - u32 len; - int err; - - if (!scsi_nl_sock) { - err = -ENOENT; - goto send_vendor_fail; - } - - len = FC_NL_MSGALIGN(sizeof(*event) + data_len); - - skb = nlmsg_new(len, GFP_KERNEL); - if (!skb) { - err = -ENOBUFS; - goto send_vendor_fail; - } - - nlh = nlmsg_put(skb, 0, 0, SCSI_TRANSPORT_MSG, len, 0); - if (!nlh) { - err = -ENOBUFS; - goto send_vendor_fail_skb; - } - event = nlmsg_data(nlh); - - INIT_SCSI_NL_HDR(&event->snlh, SCSI_NL_TRANSPORT_FC, - FC_NL_ASYNC_EVENT, len); - event->seconds = ktime_get_real_seconds(); - event->vendor_id = vendor_id; - event->host_no = shost->host_no; - event->event_datalen = data_len; /* bytes */ - event->event_num = event_number; - event->event_code = FCH_EVT_VENDOR_UNIQUE; - memcpy(&event->event_data, data_buf, data_len); - - nlmsg_multicast(scsi_nl_sock, skb, 0, SCSI_NL_GRP_FC_EVENTS, - GFP_KERNEL); - return; - -send_vendor_fail_skb: - kfree_skb(skb); -send_vendor_fail: - printk(KERN_WARNING - "%s: Dropped Event : host %d vendor_unique - err %d\n", - __func__, shost->host_no, err); - return; + fc_host_post_fc_event(shost, event_number, FCH_EVT_VENDOR_UNIQUE, + data_len, data_buf, vendor_id); } EXPORT_SYMBOL(fc_host_post_vendor_event); - static __init int fc_transport_init(void) { int error; diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h index 15da45dc2a5d..7998b322ed13 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h @@ -798,10 +798,15 @@ u32 fc_get_event_number(void); void fc_host_post_event(struct Scsi_Host *shost, u32 event_number, enum fc_host_event_code event_code, u32 event_data); void fc_host_post_vendor_event(struct Scsi_Host *shost, u32 event_number, - u32 data_len, char * data_buf, u64 vendor_id); + u32 data_len, char *data_buf, u64 vendor_id); +void fc_host_post_fc_event(struct Scsi_Host *shost, u32 event_number, + enum fc_host_event_code event_code, + u32 data_len, char *data_buf, u64 vendor_id); /* Note: when specifying vendor_id to fc_host_post_vendor_event() - * be sure to read the Vendor Type and ID formatting requirements - * specified in scsi_netlink.h + * or fc_host_post_fc_event(), be sure to read the Vendor Type + * and ID formatting requirements specified in scsi_netlink.h + * Note: when calling fc_host_post_fc_event(), vendor_id may be + * specified as 0. */ struct fc_vport *fc_vport_create(struct Scsi_Host *shost, int channel, struct fc_vport_identifiers *); From patchwork Fri Apr 5 23:04:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Smart X-Patchwork-Id: 10887953 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4786D1390 for ; Fri, 5 Apr 2019 23:04:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1D1F61FEBD for ; Fri, 5 Apr 2019 23:04:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0FA0728B35; Fri, 5 Apr 2019 23:04:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9419D286D7 for ; Fri, 5 Apr 2019 23:04:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726387AbfDEXEf (ORCPT ); Fri, 5 Apr 2019 19:04:35 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:40536 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726124AbfDEXEe (ORCPT ); Fri, 5 Apr 2019 19:04:34 -0400 Received: by mail-pg1-f195.google.com with SMTP id u9so3801143pgo.7 for ; Fri, 05 Apr 2019 16:04:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kshhw/IVke+Xyp4vN5/IOL5RFj+bQzPHktLgaqL/b6M=; b=krSgSq5+4I+IkeTZFH/EN48lbilzFRLT1FcBBR/d3aE8BokFvrriiNq5ZWGL2+RKUa U1rneq49R4JBj2em4nnuShVWCv1LWc+rXrPSorjgYLYMhQ2Pd5Df2xAlFeqKiL4gEDiB ln3SOMOjsRxaCTZZeSJREyMMvgJdRpbt65bs5qtS/fcpMg5mluI2iHHtBjeNA9Hdd8EG YJX0XA95l71acIa7OL2vW9RlNC3Q74ew/FElEmEVR8AQTWgHoYJuhgJXvtCFI6F67oG9 sR0iVrUuQNDQMdWixDYGo7yQGBcsCw7+aqrl9vZ/2qCYEUzDzLJSPxAnQgcc6WVoLVRd YihQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kshhw/IVke+Xyp4vN5/IOL5RFj+bQzPHktLgaqL/b6M=; b=BZkvKAOAfD+5okUutI/PJ1n6ebP3kz99k+35R5dxRtjWTZZzcuE+qXGW8mg4u6SMco 9/xmEhj6CbLn3HMrhZw1pJMI5XaYnkDcPaZTkyEQeRyj+CC7PYvkUin5nb7lEJneTb9l P1DRucg+uTreGZVAoTUnpd44EBKCbRh/DZxNz57nsF2QlBunWBzLSQZyHRofGH2hCbpI 3mbzVH/mDdHVg/cqrb2JuGD/SDTNgtwFvpyD44Klj/ypmupjehODUfnJfKfVBh4WYixJ wGTEXJU0tUzUoqt+UL5rUCz4czLfnyuwy6ABoCydy0JC8J8VcXmDcGRo9DsqsSxSLR6O srAw== X-Gm-Message-State: APjAAAUQaUwPZufeOaVJJZ8KA1y5n14sgmauzd6SfMp4v9VcbNtznW4a 7ockJZg5kuaePVOD4O6iqFJpyOkE X-Google-Smtp-Source: APXvYqwlL+ecBLxFBwIEhkyW/7ZXc5k+0QIBCeZ7E7KWCMRPmtfek/RCCODaBYhlAIIU9t/1Ki79og== X-Received: by 2002:a65:414a:: with SMTP id x10mr14861222pgp.237.1554505473998; Fri, 05 Apr 2019 16:04:33 -0700 (PDT) Received: from os42.localdomain ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id j67sm30805068pfc.72.2019.04.05.16.04.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 05 Apr 2019 16:04:33 -0700 (PDT) From: James Smart To: linux-scsi@vger.kernel.org Cc: muneendra.kumar@broadcom.com, James Smart Subject: [PATCH 3/4] scsi_transport_fc: Add FPIN fc event codes Date: Fri, 5 Apr 2019 16:04:22 -0700 Message-Id: <20190405230423.4316-4-jsmart2021@gmail.com> X-Mailer: git-send-email 2.13.7 In-Reply-To: <20190405230423.4316-1-jsmart2021@gmail.com> References: <20190405230423.4316-1-jsmart2021@gmail.com> Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add a new event type - an FPIN event. Add a new routine, fc_host_fpin_rcv(), that lldd's call when an FPIN is received. The routine processes the fpin payload. For now, the routine only logs an FPIN event. Signed-off-by: Muneendra Signed-off-by: James Smart Reviewed-by: Ewan D. Milne --- drivers/scsi/scsi_transport_fc.c | 18 ++++++++++++++++++ include/scsi/scsi_transport_fc.h | 2 ++ 2 files changed, 20 insertions(+) diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c index 9bea4dfbe128..14e510071046 100644 --- a/drivers/scsi/scsi_transport_fc.c +++ b/drivers/scsi/scsi_transport_fc.c @@ -147,6 +147,7 @@ static const struct { { FCH_EVT_PORT_OFFLINE, "port_offline" }, { FCH_EVT_PORT_FABRIC, "port_fabric" }, { FCH_EVT_LINK_UNKNOWN, "link_unknown" }, + { FCH_EVT_LINK_FPIN, "link_FPIN" }, { FCH_EVT_VENDOR_UNIQUE, "vendor_unique" }, }; fc_enum_name_search(host_event_code, fc_host_event_code, @@ -640,6 +641,23 @@ fc_host_post_vendor_event(struct Scsi_Host *shost, u32 event_number, } EXPORT_SYMBOL(fc_host_post_vendor_event); +/** + * fc_host_rcv_fpin - routine to process a received FPIN. + * @shost: host the FPIN was received on + * @fpin_len: length of FPIN payload, in bytes + * @fpin_buf: pointer to FPIN payload + * + * Notes: + * This routine assumes no locks are held on entry. + */ +void +fc_host_fpin_rcv(struct Scsi_Host *shost, u32 fpin_len, char *fpin_buf) +{ + fc_host_post_fc_event(shost, fc_get_event_number(), + FCH_EVT_LINK_FPIN, fpin_len, fpin_buf, 0); +} +EXPORT_SYMBOL(fc_host_fpin_rcv); + static __init int fc_transport_init(void) { diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h index 7998b322ed13..3bd59256db3a 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h @@ -473,6 +473,7 @@ enum fc_host_event_code { FCH_EVT_PORT_ONLINE = 0x202, FCH_EVT_PORT_FABRIC = 0x204, FCH_EVT_LINK_UNKNOWN = 0x500, + FCH_EVT_LINK_FPIN = 0x501, FCH_EVT_VENDOR_UNIQUE = 0xffff, }; @@ -808,6 +809,7 @@ void fc_host_post_fc_event(struct Scsi_Host *shost, u32 event_number, * Note: when calling fc_host_post_fc_event(), vendor_id may be * specified as 0. */ +void fc_host_fpin_rcv(struct Scsi_Host *shost, u32 fpin_len, char *fpin_buf); struct fc_vport *fc_vport_create(struct Scsi_Host *shost, int channel, struct fc_vport_identifiers *); int fc_vport_terminate(struct fc_vport *vport); From patchwork Fri Apr 5 23:04:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Smart X-Patchwork-Id: 10887955 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 32C5A922 for ; Fri, 5 Apr 2019 23:04:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1D15120246 for ; Fri, 5 Apr 2019 23:04:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0FE0A28B35; Fri, 5 Apr 2019 23:04:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ACF0320246 for ; Fri, 5 Apr 2019 23:04:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726409AbfDEXEg (ORCPT ); Fri, 5 Apr 2019 19:04:36 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:35013 "EHLO mail-pg1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726124AbfDEXEf (ORCPT ); Fri, 5 Apr 2019 19:04:35 -0400 Received: by mail-pg1-f194.google.com with SMTP id g8so3818119pgf.2 for ; Fri, 05 Apr 2019 16:04:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=gXm/VmrBrNm3Zbw5vgJ6yYTc+F74d9Tz65zjsYVJ0uY=; b=PI69K/FoTAfqBWuVExUYqwGyaWJ0tAT+yPVssx6iREm+yiWLW9u6hUnX3BtgUCrM4K r/372DtU5+JzTPWo3jmVWbs8aNL9ExdiKIA+1Au5cb7MTA5XqJ+MWJWdEw8pEMeYJybX tw3xgAfpgx4XOLa5JYQ3Sz8n8QguUOddTgId8JKExmGUDCVa2JL+GoH3/fMf+XgHsS/p m7MYYCyP608LnC60XAa5qW87q2//RD7O823Id01pXGVPaP6PHwfpQZZ2ohmSJQBldxGE 5d4sCAo0fUK+MjlOEMFk7dHCwslSPXv5iHWxj6TjnSd+MPhDQDnmjxKN+ZTKZwkuelx0 Ygog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=gXm/VmrBrNm3Zbw5vgJ6yYTc+F74d9Tz65zjsYVJ0uY=; b=b69tiP8ABNSKfv+6YBGG2Sb0PTq0Wwu6MVa5Av1+L1oiQ7z9wv+Qo/7ema2GPTGsRS MriUm8jzUelzhepy69puSdg/uTkcI8KPofDdTwCQWXsOMCwvZ6XjbAYikSH91v36l3Ka 8mCMfye9+4AZ14Y+e8ijIcGm0B+fCk5xkwTRQ+pWQfDeQtBCXHaMllRpsyAFSat1Jz/H UQgn6GSRovp6WLxVrC68VgfRs5LgAsp6ZV4UHkAiionUuvXKNG/IKBXkmwU2ZQFwqHJy /Yb3S2gSaby1D4RPQdeSXMXX533NYpF5NeHFt12zuVqZzJGlcmN4U3znf62ZrC/cTwjF 7ytQ== X-Gm-Message-State: APjAAAXLqkOaFvKG9dXZUMoOG/lTWIBTvkhVUokNMBkacSWYGMNGnasL WOyIEICQafKdXdn8vuqknx/nxQ1F X-Google-Smtp-Source: APXvYqyGSZptJTGSoFpRYxKm8i0MyMMKtfsyrDFGgBuVAmUbqpCMdA8kt+ACyoo14HB4WGDaqG11NQ== X-Received: by 2002:a63:2c3:: with SMTP id 186mr14325348pgc.161.1554505474911; Fri, 05 Apr 2019 16:04:34 -0700 (PDT) Received: from os42.localdomain ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id j67sm30805068pfc.72.2019.04.05.16.04.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 05 Apr 2019 16:04:34 -0700 (PDT) From: James Smart To: linux-scsi@vger.kernel.org Cc: muneendra.kumar@broadcom.com, James Smart Subject: [PATCH 4/4] lpfc: add support for posting FC events on FPIN reception Date: Fri, 5 Apr 2019 16:04:23 -0700 Message-Id: <20190405230423.4316-5-jsmart2021@gmail.com> X-Mailer: git-send-email 2.13.7 In-Reply-To: <20190405230423.4316-1-jsmart2021@gmail.com> References: <20190405230423.4316-1-jsmart2021@gmail.com> Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch adds support to recognize FPIN ELS's that are received. When one is received, the fc transport will be called to handle the the FPIN. Signed-off-by: James Smart Reviewed-by: Ewan D. Milne --- drivers/scsi/lpfc/lpfc_els.c | 8 ++++++++ drivers/scsi/lpfc/lpfc_hw.h | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c index 61348915c942..c8fb0b455f2a 100644 --- a/drivers/scsi/lpfc/lpfc_els.c +++ b/drivers/scsi/lpfc/lpfc_els.c @@ -8450,6 +8450,14 @@ lpfc_els_unsol_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, rjt_err = LSRJT_UNABLE_TPC; rjt_exp = LSEXP_INVALID_OX_RX; break; + case ELS_CMD_FPIN: + /* + * Received FPIN from fabric - pass it to the + * transport FPIN handler. + */ + fc_host_fpin_rcv(shost, elsiocb->iocb.unsli3.rcvsli3.acc_len, + (char *)payload); + break; default: lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, "RCV ELS cmd: cmd:x%x did:x%x/ste:x%x", diff --git a/drivers/scsi/lpfc/lpfc_hw.h b/drivers/scsi/lpfc/lpfc_hw.h index ec1227018913..edd8f3982023 100644 --- a/drivers/scsi/lpfc/lpfc_hw.h +++ b/drivers/scsi/lpfc/lpfc_hw.h @@ -560,6 +560,8 @@ struct fc_vft_header { #define fc_vft_hdr_hopct_WORD word1 }; +#include + /* * Extended Link Service LS_COMMAND codes (Payload Word 0) */ @@ -603,6 +605,7 @@ struct fc_vft_header { #define ELS_CMD_RNID 0x78000000 #define ELS_CMD_LIRR 0x7A000000 #define ELS_CMD_LCB 0x81000000 +#define ELS_CMD_FPIN 0x16000000 #else /* __LITTLE_ENDIAN_BITFIELD */ #define ELS_CMD_MASK 0xffff #define ELS_RSP_MASK 0xff @@ -643,6 +646,7 @@ struct fc_vft_header { #define ELS_CMD_RNID 0x78 #define ELS_CMD_LIRR 0x7A #define ELS_CMD_LCB 0x81 +#define ELS_CMD_FPIN ELS_FPIN #endif /*