All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hannes Reinecke <hare@suse.de>
To: Jitendra Bhivare <jitendra.bhivare@avagotech.com>,
	linux-scsi@vger.kernel.org, michaelc@cs.wisc.edu
Subject: Re: [PATCH 13/15] be2iscsi: Fix to process 25G link speed info from FW
Date: Fri, 18 Dec 2015 10:07:12 +0100	[thread overview]
Message-ID: <5673CCC0.7000004@suse.de> (raw)
In-Reply-To: <1450194906-12925-14-git-send-email-jitendra.bhivare@avagotech.com>

On 12/15/2015 04:55 PM, Jitendra Bhivare wrote:
> From: Jitendra <jitendra.bhivare@avagotech.com>
>
> Async link event provides port_speed info. Use the same to report in
> ISCSI_HOST_PARAM_PORT_SPEED query. Removed link status query IOCTL used
> to do the same.
>
> 25G and 40G are defined in kernel enum iscsi_port_speed.
>
> Fixed get_nic_conf structure definition. Removed rsvd[23] field in
> be_cmd_get_nic_conf_resp.
>
> Signed-off-by: Jitendra <jitendra.bhivare@avagotech.com>
> ---
>   drivers/scsi/be2iscsi/be_cmds.c     |   47 ++++++++++++-------------
>   drivers/scsi/be2iscsi/be_cmds.h     |   65 ++++++++++------------------------
>   drivers/scsi/be2iscsi/be_iscsi.c    |   41 +++++----------------
>   drivers/scsi/be2iscsi/be_main.h     |    1 +
>   drivers/scsi/be2iscsi/be_mgmt.c     |   28 ---------------
>   drivers/scsi/scsi_transport_iscsi.c |    2 +
>   include/scsi/iscsi_if.h             |    2 +
>   7 files changed, 57 insertions(+), 129 deletions(-)
>
> diff --git a/drivers/scsi/be2iscsi/be_cmds.c b/drivers/scsi/be2iscsi/be_cmds.c
> index 3dbf6af..498eba2 100644
> --- a/drivers/scsi/be2iscsi/be_cmds.c
> +++ b/drivers/scsi/be2iscsi/be_cmds.c
> @@ -402,31 +402,31 @@ void beiscsi_fail_session(struct iscsi_cls_session *cls_session)
>   	iscsi_session_failure(cls_session->dd_data, ISCSI_ERR_CONN_FAILED);
>   }
>
> -static void beiscsi_async_link_state_process(struct beiscsi_hba *phba,
> -		struct be_async_event_link_state *evt)
> +static void beiscsi_process_async_link(struct beiscsi_hba *phba,
> +				       struct be_mcc_compl *compl)
>   {
> -	if ((evt->port_link_status == ASYNC_EVENT_LINK_DOWN) ||
> -	    ((evt->port_link_status & ASYNC_EVENT_LOGICAL) &&
> -	     (evt->port_fault != BEISCSI_PHY_LINK_FAULT_NONE))) {
> -		phba->state = BE_ADAPTER_LINK_DOWN;
> +	struct be_async_event_link_state *evt;
>
> -		beiscsi_log(phba, KERN_ERR,
> -			    BEISCSI_LOG_CONFIG | BEISCSI_LOG_INIT,
> -			    "BC_%d : Link Down on Port %d\n",
> -			    evt->physical_port);
> +	evt = (struct be_async_event_link_state *)compl;
>
> -		iscsi_host_for_each_session(phba->shost,
> -					    beiscsi_fail_session);
> -	} else if ((evt->port_link_status & ASYNC_EVENT_LINK_UP) ||
> -		    ((evt->port_link_status & ASYNC_EVENT_LOGICAL) &&
> -		     (evt->port_fault == BEISCSI_PHY_LINK_FAULT_NONE))) {
> +	phba->port_speed = evt->port_speed;
> +	/**
> +	 * Check logical link status in ASYNC event.
> +	 * This has been newly introduced in SKH-R Firmware 10.0.338.45.
> +	 **/
> +	if (evt->port_link_status & BE_ASYNC_LINK_UP_MASK) {
>   		phba->state = BE_ADAPTER_LINK_UP | BE_ADAPTER_CHECK_BOOT;
>   		phba->get_boot = BE_GET_BOOT_RETRIES;
> -
> -		beiscsi_log(phba, KERN_ERR,
> -			    BEISCSI_LOG_CONFIG | BEISCSI_LOG_INIT,
> -			    "BC_%d : Link UP on Port %d\n",
> -			    evt->physical_port);
> +		__beiscsi_log(phba, KERN_ERR,
> +			      "BC_%d : Link Up on Port %d tag 0x%x\n",
> +			      evt->physical_port, evt->event_tag);
> +	} else {
> +		phba->state = BE_ADAPTER_LINK_DOWN;
> +		__beiscsi_log(phba, KERN_ERR,
> +			      "BC_%d : Link Down on Port %d tag 0x%x\n",
> +			      evt->physical_port, evt->event_tag);
> +		iscsi_host_for_each_session(phba->shost,
> +					    beiscsi_fail_session);
>   	}
>   }
>
> @@ -503,8 +503,7 @@ void beiscsi_process_async_event(struct beiscsi_hba *phba,
>   	evt_code &= ASYNC_TRAILER_EVENT_CODE_MASK;
>   	switch (evt_code) {
>   	case ASYNC_EVENT_CODE_LINK_STATE:
> -		beiscsi_async_link_state_process(phba,
> -				(struct be_async_event_link_state *)compl);
> +		beiscsi_process_async_link(phba, compl);
>   		break;
>   	case ASYNC_EVENT_CODE_ISCSI:
>   		phba->state |= BE_ADAPTER_CHECK_BOOT;
> @@ -520,8 +519,8 @@ void beiscsi_process_async_event(struct beiscsi_hba *phba,
>   	}
>
>   	beiscsi_log(phba, sev, BEISCSI_LOG_CONFIG | BEISCSI_LOG_MBOX,
> -		    "BC_%d : ASYNC Event: status 0x%08x flags 0x%08x\n",
> -		    compl->status, compl->flags);
> +		    "BC_%d : ASYNC Event %x: status 0x%08x flags 0x%08x\n",
> +		    evt_code, compl->status, compl->flags);
>   }
>
>   int beiscsi_process_mcc(struct beiscsi_hba *phba)
> diff --git a/drivers/scsi/be2iscsi/be_cmds.h b/drivers/scsi/be2iscsi/be_cmds.h
> index 6411f7b..3b9bc2e 100644
> --- a/drivers/scsi/be2iscsi/be_cmds.h
> +++ b/drivers/scsi/be2iscsi/be_cmds.h
> @@ -142,7 +142,6 @@ struct be_async_event_trailer {
>   enum {
>   	ASYNC_EVENT_LINK_DOWN = 0x0,
>   	ASYNC_EVENT_LINK_UP = 0x1,
> -	ASYNC_EVENT_LOGICAL = 0x2
>   };
>
>   /**
> @@ -152,13 +151,26 @@ enum {
>   struct be_async_event_link_state {
>   	u8 physical_port;
>   	u8 port_link_status;
> +/**
> + * ASYNC_EVENT_LINK_DOWN		0x0
> + * ASYNC_EVENT_LINK_UP			0x1
> + * ASYNC_EVENT_LINK_LOGICAL_DOWN	0x2
> + * ASYNC_EVENT_LINK_LOGICAL_UP		0x3
> + */
> +#define BE_ASYNC_LINK_UP_MASK		0x01
>   	u8 port_duplex;
>   	u8 port_speed;
> -#define BEISCSI_PHY_LINK_FAULT_NONE	0x00
> -#define BEISCSI_PHY_LINK_FAULT_LOCAL	0x01
> -#define BEISCSI_PHY_LINK_FAULT_REMOTE	0x02
> +/* BE2ISCSI_LINK_SPEED_ZERO	0x00 - no link */
> +#define BE2ISCSI_LINK_SPEED_10MBPS	0x01
> +#define BE2ISCSI_LINK_SPEED_100MBPS	0x02
> +#define BE2ISCSI_LINK_SPEED_1GBPS	0x03
> +#define BE2ISCSI_LINK_SPEED_10GBPS	0x04
> +#define BE2ISCSI_LINK_SPEED_25GBPS	0x06
> +#define BE2ISCSI_LINK_SPEED_40GBPS	0x07
>   	u8 port_fault;
> -	u8 rsvd0[7];
> +	u8 event_reason;
> +	u16 qos_link_speed;
> +	u32 event_tag;
>   	struct be_async_event_trailer trailer;
>   } __packed;
>
Why did you drop the link_fault definitions, but kept the structure 
field?
Is this intentional?

> @@ -675,20 +687,6 @@ struct be_cmd_req_modify_eq_delay {
>
>   /******************** Get MAC ADDR *******************/
>
> -#define ETH_ALEN	6
> -
> -struct be_cmd_get_nic_conf_req {
> -	struct be_cmd_req_hdr hdr;
> -	u32 nic_port_count;
> -	u32 speed;
> -	u32 max_speed;
> -	u32 link_state;
> -	u32 max_frame_size;
> -	u16 size_of_structure;
> -	u8 mac_address[ETH_ALEN];
> -	u32 rsvd[23];
> -};
> -
>   struct be_cmd_get_nic_conf_resp {
>   	struct be_cmd_resp_hdr hdr;
>   	u32 nic_port_count;
> @@ -697,9 +695,8 @@ struct be_cmd_get_nic_conf_resp {
>   	u32 link_state;
>   	u32 max_frame_size;
>   	u16 size_of_structure;
> -	u8 mac_address[6];
> -	u32 rsvd[23];
> -};
> +	u8 mac_address[ETH_ALEN];
> +} __packed;
>
>   #define BEISCSI_ALIAS_LEN 32
>
> @@ -711,29 +708,6 @@ struct be_cmd_hba_name {
>   	u8 initiator_alias[BEISCSI_ALIAS_LEN];
>   } __packed;
>
> -struct be_cmd_ntwk_link_status_req {
> -	struct be_cmd_req_hdr hdr;
> -	u32 rsvd0;
> -} __packed;
> -
> -/*** Port Speed Values ***/
> -#define BE2ISCSI_LINK_SPEED_ZERO	0x00
> -#define BE2ISCSI_LINK_SPEED_10MBPS	0x01
> -#define BE2ISCSI_LINK_SPEED_100MBPS	0x02
> -#define BE2ISCSI_LINK_SPEED_1GBPS	0x03
> -#define BE2ISCSI_LINK_SPEED_10GBPS	0x04
> -struct be_cmd_ntwk_link_status_resp {
> -	struct be_cmd_resp_hdr hdr;
> -	u8 phys_port;
> -	u8 mac_duplex;
> -	u8 mac_speed;
> -	u8 mac_fault;
> -	u8 mgmt_mac_duplex;
> -	u8 mgmt_mac_speed;
> -	u16 qos_link_speed;
> -	u32 logical_link_speed;
> -} __packed;
> -
>   int beiscsi_cmd_eq_create(struct be_ctrl_info *ctrl,
>   			  struct be_queue_info *eq, int eq_delay);
>
> @@ -752,7 +726,6 @@ int be_poll_mcc(struct be_ctrl_info *ctrl);
>   int mgmt_check_supported_fw(struct be_ctrl_info *ctrl,
>   				      struct beiscsi_hba *phba);
>   unsigned int be_cmd_get_initname(struct beiscsi_hba *phba);
> -unsigned int be_cmd_get_port_speed(struct beiscsi_hba *phba);
>
>   void free_mcc_tag(struct be_ctrl_info *ctrl, unsigned int tag);
>
> diff --git a/drivers/scsi/be2iscsi/be_iscsi.c b/drivers/scsi/be2iscsi/be_iscsi.c
> index 3545721..9eef68b 100644
> --- a/drivers/scsi/be2iscsi/be_iscsi.c
> +++ b/drivers/scsi/be2iscsi/be_iscsi.c
> @@ -758,7 +758,7 @@ static void beiscsi_get_port_state(struct Scsi_Host *shost)
>   	struct beiscsi_hba *phba = iscsi_host_priv(shost);
>   	struct iscsi_cls_host *ihost = shost->shost_data;
>
> -	ihost->port_state = (phba->state == BE_ADAPTER_LINK_UP) ?
> +	ihost->port_state = (phba->state & BE_ADAPTER_LINK_UP) ?
>   		ISCSI_PORT_STATE_UP : ISCSI_PORT_STATE_DOWN;
>   }
>
> @@ -766,34 +766,13 @@ static void beiscsi_get_port_state(struct Scsi_Host *shost)
>    * beiscsi_get_port_speed  - Get the Port Speed from Adapter
>    * @shost : pointer to scsi_host structure
>    *
> - * returns Success/Failure
>    */
> -static int beiscsi_get_port_speed(struct Scsi_Host *shost)
> +static void beiscsi_get_port_speed(struct Scsi_Host *shost)
>   {
> -	int rc;
> -	unsigned int tag;
> -	struct be_mcc_wrb *wrb;
> -	struct be_cmd_ntwk_link_status_resp *resp;
>   	struct beiscsi_hba *phba = iscsi_host_priv(shost);
>   	struct iscsi_cls_host *ihost = shost->shost_data;
>
> -	tag = be_cmd_get_port_speed(phba);
> -	if (!tag) {
> -		beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_CONFIG,
> -			    "BS_%d : Getting Port Speed Failed\n");
> -
> -		 return -EBUSY;
> -	}
> -	rc = beiscsi_mccq_compl(phba, tag, &wrb, NULL);
> -	if (rc) {
> -		beiscsi_log(phba, KERN_ERR,
> -			    BEISCSI_LOG_CONFIG | BEISCSI_LOG_MBOX,
> -			    "BS_%d : Port Speed MBX Failed\n");
> -		return rc;
> -	}
> -	resp = embedded_payload(wrb);
> -
> -	switch (resp->mac_speed) {
> +	switch (phba->port_speed) {
>   	case BE2ISCSI_LINK_SPEED_10MBPS:
>   		ihost->port_speed = ISCSI_PORT_SPEED_10MBPS;
>   		break;
> @@ -806,10 +785,15 @@ static int beiscsi_get_port_speed(struct Scsi_Host *shost)
>   	case BE2ISCSI_LINK_SPEED_10GBPS:
>   		ihost->port_speed = ISCSI_PORT_SPEED_10GBPS;
>   		break;
> +	case BE2ISCSI_LINK_SPEED_25GBPS:
> +		ihost->port_speed = ISCSI_PORT_SPEED_25GBPS;
> +		break;
> +	case BE2ISCSI_LINK_SPEED_40GBPS:
> +		ihost->port_speed = ISCSI_PORT_SPEED_40GBPS;
> +		break;
>   	default:
>   		ihost->port_speed = ISCSI_PORT_SPEED_UNKNOWN;
>   	}
> -	return 0;
>   }
>
>   /**
> @@ -859,12 +843,7 @@ int beiscsi_get_host_param(struct Scsi_Host *shost,
>   		status = sprintf(buf, "%s\n", iscsi_get_port_state_name(shost));
>   		break;
>   	case ISCSI_HOST_PARAM_PORT_SPEED:
> -		status = beiscsi_get_port_speed(shost);
> -		if (status) {
> -			beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_CONFIG,
> -				    "BS_%d : Retreiving Port Speed Failed\n");
> -			return status;
> -		}
> +		beiscsi_get_port_speed(shost);
>   		status = sprintf(buf, "%s\n", iscsi_get_port_speed_name(shost));
>   		break;
>   	default:
> diff --git a/drivers/scsi/be2iscsi/be_main.h b/drivers/scsi/be2iscsi/be_main.h
> index fabade3..41c708c 100644
> --- a/drivers/scsi/be2iscsi/be_main.h
> +++ b/drivers/scsi/be2iscsi/be_main.h
> @@ -427,6 +427,7 @@ struct beiscsi_hba {
>   	bool mac_addr_set;
>   	u8 mac_address[ETH_ALEN];
>   	u8 port_name;
> +	u8 port_speed;
>   	char fw_ver_str[BEISCSI_VER_STRLEN];
>   	char wq_name[20];
>   	struct workqueue_struct *wq;	/* The actuak work queue */
> diff --git a/drivers/scsi/be2iscsi/be_mgmt.c b/drivers/scsi/be2iscsi/be_mgmt.c
> index 15f7ad7..5c66f44 100644
> --- a/drivers/scsi/be2iscsi/be_mgmt.c
> +++ b/drivers/scsi/be2iscsi/be_mgmt.c
> @@ -1382,34 +1382,6 @@ unsigned int be_cmd_get_initname(struct beiscsi_hba *phba)
>   	return tag;
>   }
>
> -unsigned int be_cmd_get_port_speed(struct beiscsi_hba *phba)
> -{
> -	unsigned int tag = 0;
> -	struct be_mcc_wrb *wrb;
> -	struct be_cmd_ntwk_link_status_req *req;
> -	struct be_ctrl_info *ctrl = &phba->ctrl;
> -
> -	if (mutex_lock_interruptible(&ctrl->mbox_lock))
> -		return 0;
> -	tag = alloc_mcc_tag(phba);
> -	if (!tag) {
> -		mutex_unlock(&ctrl->mbox_lock);
> -		return tag;
> -	}
> -
> -	wrb = wrb_from_mccq(phba);
> -	req = embedded_payload(wrb);
> -	wrb->tag0 |= tag;
> -	be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
> -	be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
> -			OPCODE_COMMON_NTWK_LINK_STATUS_QUERY,
> -			sizeof(*req));
> -
> -	be_mcc_notify(phba);
> -	mutex_unlock(&ctrl->mbox_lock);
> -	return tag;
> -}
> -
>   /**
>    * be_mgmt_get_boot_shandle()- Get the session handle
>    * @phba: device priv structure instance
> diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
> index e4b3d8f..4414816 100644
> --- a/drivers/scsi/scsi_transport_iscsi.c
> +++ b/drivers/scsi/scsi_transport_iscsi.c
> @@ -4308,6 +4308,8 @@ static const struct {
>   	{ISCSI_PORT_SPEED_100MBPS,	"100 Mbps" },
>   	{ISCSI_PORT_SPEED_1GBPS,	"1 Gbps" },
>   	{ISCSI_PORT_SPEED_10GBPS,	"10 Gbps" },
> +	{ISCSI_PORT_SPEED_25GBPS,       "25 Gbps" },
> +	{ISCSI_PORT_SPEED_40GBPS,       "40 Gbps" },
>   };
>
>   char *iscsi_get_port_speed_name(struct Scsi_Host *shost)
> diff --git a/include/scsi/iscsi_if.h b/include/scsi/iscsi_if.h
> index 95ed942..d66c070 100644
> --- a/include/scsi/iscsi_if.h
> +++ b/include/scsi/iscsi_if.h
> @@ -724,6 +724,8 @@ enum iscsi_port_speed {
>   	ISCSI_PORT_SPEED_100MBPS	= 0x4,
>   	ISCSI_PORT_SPEED_1GBPS		= 0x8,
>   	ISCSI_PORT_SPEED_10GBPS		= 0x10,
> +	ISCSI_PORT_SPEED_25GBPS         = 0x20,
> +	ISCSI_PORT_SPEED_40GBPS         = 0x40,
>   };
>
>   /* iSCSI port state */
>
By rights these two bits should be in a separate patch, as they are 
updating the infrastructure and are not directly related to the 
be2iscsi driver.

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		               zSeries & Storage
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2015-12-18  9:07 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-15 15:54 [PATCH 00/15] be2iscsi: driver update 11.0.0.0 Jitendra Bhivare
2015-12-15 15:54 ` [PATCH 01/15] be2iscsi: Fix soft lockup in mgmt_get_all_if_id path using bmbx Jitendra Bhivare
2015-12-18  8:58   ` Hannes Reinecke
2015-12-15 15:54 ` [PATCH 02/15] be2iscsi: Fix mbox synchronization replacing spinlock with mutex Jitendra Bhivare
2015-12-18  8:59   ` Hannes Reinecke
2015-12-20  7:35   ` Mike Christie
2015-12-20  7:47     ` Mike Christie
2015-12-15 15:54 ` [PATCH 03/15] be2iscsi: Fix to use atomic operations for tag_state Jitendra Bhivare
2015-12-18  8:59   ` Hannes Reinecke
2015-12-20  7:44   ` Mike Christie
2015-12-20  9:01     ` Mike Christie
2015-12-20 10:13       ` Mike Christie
2015-12-21  4:47         ` Jitendra Bhivare
2015-12-15 15:54 ` [PATCH 04/15] be2iscsi: Fix to synchronize tag allocation using spin_lock Jitendra Bhivare
2015-12-18  8:59   ` Hannes Reinecke
2015-12-15 15:54 ` [PATCH 05/15] be2iscsi: Set mbox timeout to 30s Jitendra Bhivare
2015-12-18  9:00   ` Hannes Reinecke
2015-12-15 15:54 ` [PATCH 06/15] be2iscsi: Added return value check for mgmt_get_all_if_id Jitendra Bhivare
2015-12-18  9:00   ` Hannes Reinecke
2015-12-15 15:54 ` [PATCH 07/15] be2iscsi: Fix to remove shutdown entry point Jitendra Bhivare
2015-12-18  9:01   ` Hannes Reinecke
2015-12-15 15:54 ` [PATCH 08/15] be2iscsi: Fix VLAN support for IPv6 network Jitendra Bhivare
2015-12-18  9:01   ` Hannes Reinecke
2015-12-15 15:55 ` [PATCH 09/15] be2iscsi: Fix to handle misconfigured optics events Jitendra Bhivare
2015-12-18  9:02   ` Hannes Reinecke
2015-12-15 15:55 ` [PATCH 10/15] be2iscsi: Add FW config validation Jitendra Bhivare
2015-12-18  9:03   ` Hannes Reinecke
2015-12-21  2:57     ` Jitendra Bhivare
2015-12-21  3:59     ` Jitendra Bhivare
2015-12-15 15:55 ` [PATCH 11/15] be2iscsi: Fix return value for MCC completion Jitendra Bhivare
2015-12-18  9:04   ` Hannes Reinecke
2015-12-15 15:55 ` [PATCH 12/15] be2iscsi: Fix IOPOLL implementation Jitendra Bhivare
2015-12-18  9:04   ` Hannes Reinecke
2015-12-15 15:55 ` [PATCH 13/15] be2iscsi: Fix to process 25G link speed info from FW Jitendra Bhivare
2015-12-18  9:07   ` Hannes Reinecke [this message]
     [not found]     ` <CAOA9gs36+ozeo=ZtqHYMvznwMSG6wKnG_zLOp__=wnKMkKv0CA@mail.gmail.com>
2015-12-21  7:13       ` Hannes Reinecke
2015-12-15 15:55 ` [PATCH 14/15] be2iscsi: Fix WRB leak in login/logout path Jitendra Bhivare
2015-12-18  9:08   ` Hannes Reinecke
2015-12-15 15:55 ` [PATCH 15/15] be2iscsi: Update the driver version Jitendra Bhivare
2015-12-18  9:08   ` Hannes Reinecke
2015-12-18  9:11 ` [PATCH 00/15] be2iscsi: driver update 11.0.0.0 Hannes Reinecke

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5673CCC0.7000004@suse.de \
    --to=hare@suse.de \
    --cc=jitendra.bhivare@avagotech.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=michaelc@cs.wisc.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.