All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/4] net/smc: updates 2022-7-25
@ 2022-07-25 14:09 Wenjia Zhang
  2022-07-25 14:09 ` [PATCH net-next 1/4] net/smc: Eliminate struct smc_ism_position Wenjia Zhang
                   ` (5 more replies)
  0 siblings, 6 replies; 12+ messages in thread
From: Wenjia Zhang @ 2022-07-25 14:09 UTC (permalink / raw)
  To: David Miller, Jakub Kicinski
  Cc: netdev, linux-s390, Heiko Carstens, Karsten Graul,
	Alexandra Winter, Stefan Raspl, Wenjia Zhang

Hi Dave & Jakub,

please apply the following patches to netdev's net-next tree.

These patches do some preparation to make ISM available for uses beyond
SMC-D, and a bunch of cleanups.

Thanks,
Wenjia

Heiko Carstens (1):
  net/smc: Eliminate struct smc_ism_position

Stefan Raspl (3):
  s390/ism: Cleanups
  net/smc: Pass on DMBE bit mask in IRQ handler
  net/smc: Enable module load on netlink usage

 drivers/s390/net/ism_drv.c | 15 ++++++++-------
 include/net/smc.h          |  4 ++--
 net/smc/af_smc.c           |  1 +
 net/smc/smc_diag.c         |  1 +
 net/smc/smc_ism.c          | 19 ++++---------------
 net/smc/smc_ism.h          | 20 +++++++++++---------
 net/smc/smc_tx.c           | 10 +++-------
 7 files changed, 30 insertions(+), 40 deletions(-)

-- 
2.35.2


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH net-next 1/4] net/smc: Eliminate struct smc_ism_position
  2022-07-25 14:09 [PATCH net-next 0/4] net/smc: updates 2022-7-25 Wenjia Zhang
@ 2022-07-25 14:09 ` Wenjia Zhang
  2022-07-26  2:48   ` Tony Lu
  2022-07-25 14:09 ` [PATCH net-next 2/4] s390/ism: Cleanups Wenjia Zhang
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Wenjia Zhang @ 2022-07-25 14:09 UTC (permalink / raw)
  To: David Miller, Jakub Kicinski
  Cc: netdev, linux-s390, Heiko Carstens, Karsten Graul,
	Alexandra Winter, Stefan Raspl, Wenjia Zhang

From: Heiko Carstens <hca@linux.ibm.com>

This struct is used in a single place only, and its usage generates
inefficient code. Time to clean up!

Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Reviewed-and-tested-by: Stefan Raspl <raspl@linux.ibm.com>
Signed-off-by: Wenjia Zhang < wenjia@linux.ibm.com>
---
 net/smc/smc_ism.c | 11 -----------
 net/smc/smc_ism.h | 20 +++++++++++---------
 net/smc/smc_tx.c  | 10 +++-------
 3 files changed, 14 insertions(+), 27 deletions(-)

diff --git a/net/smc/smc_ism.c b/net/smc/smc_ism.c
index a2084ecdb97e..c656ef25ee4b 100644
--- a/net/smc/smc_ism.c
+++ b/net/smc/smc_ism.c
@@ -33,17 +33,6 @@ int smc_ism_cantalk(u64 peer_gid, unsigned short vlan_id, struct smcd_dev *smcd)
 					   vlan_id);
 }
 
-int smc_ism_write(struct smcd_dev *smcd, const struct smc_ism_position *pos,
-		  void *data, size_t len)
-{
-	int rc;
-
-	rc = smcd->ops->move_data(smcd, pos->token, pos->index, pos->signal,
-				  pos->offset, data, len);
-
-	return rc < 0 ? rc : 0;
-}
-
 void smc_ism_get_system_eid(u8 **eid)
 {
 	if (!smc_ism_v2_capable)
diff --git a/net/smc/smc_ism.h b/net/smc/smc_ism.h
index 004b22a13ffa..d6b2db604fe8 100644
--- a/net/smc/smc_ism.h
+++ b/net/smc/smc_ism.h
@@ -28,13 +28,6 @@ struct smc_ism_vlanid {			/* VLAN id set on ISM device */
 	refcount_t refcnt;		/* Reference count */
 };
 
-struct smc_ism_position {	/* ISM device position to write to */
-	u64 token;		/* Token of DMB */
-	u32 offset;		/* Offset into DMBE */
-	u8 index;		/* Index of DMBE */
-	u8 signal;		/* Generate interrupt on owner side */
-};
-
 struct smcd_dev;
 
 int smc_ism_cantalk(u64 peer_gid, unsigned short vlan_id, struct smcd_dev *dev);
@@ -45,12 +38,21 @@ int smc_ism_put_vlan(struct smcd_dev *dev, unsigned short vlan_id);
 int smc_ism_register_dmb(struct smc_link_group *lgr, int buf_size,
 			 struct smc_buf_desc *dmb_desc);
 int smc_ism_unregister_dmb(struct smcd_dev *dev, struct smc_buf_desc *dmb_desc);
-int smc_ism_write(struct smcd_dev *dev, const struct smc_ism_position *pos,
-		  void *data, size_t len);
 int smc_ism_signal_shutdown(struct smc_link_group *lgr);
 void smc_ism_get_system_eid(u8 **eid);
 u16 smc_ism_get_chid(struct smcd_dev *dev);
 bool smc_ism_is_v2_capable(void);
 void smc_ism_init(void);
 int smcd_nl_get_device(struct sk_buff *skb, struct netlink_callback *cb);
+
+static inline int smc_ism_write(struct smcd_dev *smcd, u64 dmb_tok,
+				unsigned int idx, bool sf, unsigned int offset,
+				void *data, size_t len)
+{
+	int rc;
+
+	rc = smcd->ops->move_data(smcd, dmb_tok, idx, sf, offset, data, len);
+	return rc < 0 ? rc : 0;
+}
+
 #endif
diff --git a/net/smc/smc_tx.c b/net/smc/smc_tx.c
index 4e8377657a62..64dedffe9d26 100644
--- a/net/smc/smc_tx.c
+++ b/net/smc/smc_tx.c
@@ -320,15 +320,11 @@ int smc_tx_sendpage(struct smc_sock *smc, struct page *page, int offset,
 int smcd_tx_ism_write(struct smc_connection *conn, void *data, size_t len,
 		      u32 offset, int signal)
 {
-	struct smc_ism_position pos;
 	int rc;
 
-	memset(&pos, 0, sizeof(pos));
-	pos.token = conn->peer_token;
-	pos.index = conn->peer_rmbe_idx;
-	pos.offset = conn->tx_off + offset;
-	pos.signal = signal;
-	rc = smc_ism_write(conn->lgr->smcd, &pos, data, len);
+	rc = smc_ism_write(conn->lgr->smcd, conn->peer_token,
+			   conn->peer_rmbe_idx, signal, conn->tx_off + offset,
+			   data, len);
 	if (rc)
 		conn->local_tx_ctrl.conn_state_flags.peer_conn_abort = 1;
 	return rc;
-- 
2.35.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH net-next 2/4] s390/ism: Cleanups
  2022-07-25 14:09 [PATCH net-next 0/4] net/smc: updates 2022-7-25 Wenjia Zhang
  2022-07-25 14:09 ` [PATCH net-next 1/4] net/smc: Eliminate struct smc_ism_position Wenjia Zhang
@ 2022-07-25 14:09 ` Wenjia Zhang
  2022-07-26  3:13   ` Tony Lu
  2022-07-25 14:09 ` [PATCH net-next 3/4] net/smc: Pass on DMBE bit mask in IRQ handler Wenjia Zhang
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Wenjia Zhang @ 2022-07-25 14:09 UTC (permalink / raw)
  To: David Miller, Jakub Kicinski
  Cc: netdev, linux-s390, Heiko Carstens, Karsten Graul,
	Alexandra Winter, Stefan Raspl, Wenjia Zhang

From: Stefan Raspl <raspl@linux.ibm.com>

Reworked signature of the function to retrieve the system EID: No plausible
reason to use a double pointer. And neither to pass in the device as an
argument, as this identifier is by definition per system, not per device.
Plus some minor consistency edits.

Signed-off-by: Stefan Raspl <raspl@linux.ibm.com>
Signed-off-by: Wenjia Zhang < wenjia@linux.ibm.com>
---
 drivers/s390/net/ism_drv.c | 11 +++++------
 include/net/smc.h          |  2 +-
 net/smc/smc_ism.c          |  2 +-
 3 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/drivers/s390/net/ism_drv.c b/drivers/s390/net/ism_drv.c
index 5f7e28de8b15..4665e9a0e048 100644
--- a/drivers/s390/net/ism_drv.c
+++ b/drivers/s390/net/ism_drv.c
@@ -409,20 +409,19 @@ static void ism_create_system_eid(void)
 	memcpy(&SYSTEM_EID.type, tmp, 4);
 }
 
-static void ism_get_system_eid(struct smcd_dev *smcd, u8 **eid)
+static u8 *ism_get_system_eid(void)
 {
-	*eid = &SYSTEM_EID.seid_string[0];
+	return SYSTEM_EID.seid_string;
 }
 
 static u16 ism_get_chid(struct smcd_dev *smcd)
 {
-	struct ism_dev *ismdev;
+	struct ism_dev *ism = (struct ism_dev *)smcd->priv;
 
-	ismdev = (struct ism_dev *)smcd->priv;
-	if (!ismdev || !ismdev->pdev)
+	if (!ism || !ism->pdev)
 		return 0;
 
-	return to_zpci(ismdev->pdev)->pchid;
+	return to_zpci(ism->pdev)->pchid;
 }
 
 static void ism_handle_event(struct ism_dev *ism)
diff --git a/include/net/smc.h b/include/net/smc.h
index 37f829d9c6e5..1868a5014dea 100644
--- a/include/net/smc.h
+++ b/include/net/smc.h
@@ -72,7 +72,7 @@ struct smcd_ops {
 	int (*move_data)(struct smcd_dev *dev, u64 dmb_tok, unsigned int idx,
 			 bool sf, unsigned int offset, void *data,
 			 unsigned int size);
-	void (*get_system_eid)(struct smcd_dev *dev, u8 **eid);
+	u8* (*get_system_eid)(void);
 	u16 (*get_chid)(struct smcd_dev *dev);
 };
 
diff --git a/net/smc/smc_ism.c b/net/smc/smc_ism.c
index c656ef25ee4b..e51c0cdff8e0 100644
--- a/net/smc/smc_ism.c
+++ b/net/smc/smc_ism.c
@@ -429,7 +429,7 @@ int smcd_register_dev(struct smcd_dev *smcd)
 	if (list_empty(&smcd_dev_list.list)) {
 		u8 *system_eid = NULL;
 
-		smcd->ops->get_system_eid(smcd, &system_eid);
+		system_eid = smcd->ops->get_system_eid();
 		if (system_eid[24] != '0' || system_eid[28] != '0') {
 			smc_ism_v2_capable = true;
 			memcpy(smc_ism_v2_system_eid, system_eid,
-- 
2.35.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH net-next 3/4] net/smc: Pass on DMBE bit mask in IRQ handler
  2022-07-25 14:09 [PATCH net-next 0/4] net/smc: updates 2022-7-25 Wenjia Zhang
  2022-07-25 14:09 ` [PATCH net-next 1/4] net/smc: Eliminate struct smc_ism_position Wenjia Zhang
  2022-07-25 14:09 ` [PATCH net-next 2/4] s390/ism: Cleanups Wenjia Zhang
@ 2022-07-25 14:09 ` Wenjia Zhang
  2022-07-26  3:11   ` Tony Lu
  2022-07-25 14:10 ` [PATCH net-next 4/4] net/smc: Enable module load on netlink usage Wenjia Zhang
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Wenjia Zhang @ 2022-07-25 14:09 UTC (permalink / raw)
  To: David Miller, Jakub Kicinski
  Cc: netdev, linux-s390, Heiko Carstens, Karsten Graul,
	Alexandra Winter, Stefan Raspl, Wenjia Zhang

From: Stefan Raspl <raspl@linux.ibm.com>

Make the DMBE bits, which are passed on individually in ism_move() as
parameter idx, available to the receiver.

Signed-off-by: Stefan Raspl <raspl@linux.ibm.com>
Signed-off-by: Wenjia Zhang < wenjia@linux.ibm.com>
---
 drivers/s390/net/ism_drv.c | 4 +++-
 include/net/smc.h          | 2 +-
 net/smc/smc_ism.c          | 6 +++---
 3 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/s390/net/ism_drv.c b/drivers/s390/net/ism_drv.c
index 4665e9a0e048..d34bb6ec1490 100644
--- a/drivers/s390/net/ism_drv.c
+++ b/drivers/s390/net/ism_drv.c
@@ -443,6 +443,7 @@ static irqreturn_t ism_handle_irq(int irq, void *data)
 	struct ism_dev *ism = data;
 	unsigned long bit, end;
 	unsigned long *bv;
+	u16 dmbemask;
 
 	bv = (void *) &ism->sba->dmb_bits[ISM_DMB_WORD_OFFSET];
 	end = sizeof(ism->sba->dmb_bits) * BITS_PER_BYTE - ISM_DMB_BIT_OFFSET;
@@ -456,9 +457,10 @@ static irqreturn_t ism_handle_irq(int irq, void *data)
 			break;
 
 		clear_bit_inv(bit, bv);
+		dmbemask = ism->sba->dmbe_mask[bit + ISM_DMB_BIT_OFFSET];
 		ism->sba->dmbe_mask[bit + ISM_DMB_BIT_OFFSET] = 0;
 		barrier();
-		smcd_handle_irq(ism->smcd, bit + ISM_DMB_BIT_OFFSET);
+		smcd_handle_irq(ism->smcd, bit + ISM_DMB_BIT_OFFSET, dmbemask);
 	}
 
 	if (ism->sba->e) {
diff --git a/include/net/smc.h b/include/net/smc.h
index 1868a5014dea..c926d3313e05 100644
--- a/include/net/smc.h
+++ b/include/net/smc.h
@@ -101,5 +101,5 @@ int smcd_register_dev(struct smcd_dev *smcd);
 void smcd_unregister_dev(struct smcd_dev *smcd);
 void smcd_free_dev(struct smcd_dev *smcd);
 void smcd_handle_event(struct smcd_dev *dev, struct smcd_event *event);
-void smcd_handle_irq(struct smcd_dev *dev, unsigned int bit);
+void smcd_handle_irq(struct smcd_dev *dev, unsigned int bit, u16 dmbemask);
 #endif	/* _SMC_H */
diff --git a/net/smc/smc_ism.c b/net/smc/smc_ism.c
index e51c0cdff8e0..911fe08bc54b 100644
--- a/net/smc/smc_ism.c
+++ b/net/smc/smc_ism.c
@@ -508,13 +508,13 @@ void smcd_handle_event(struct smcd_dev *smcd, struct smcd_event *event)
 EXPORT_SYMBOL_GPL(smcd_handle_event);
 
 /* SMCD Device interrupt handler. Called from ISM device interrupt handler.
- * Parameters are smcd device pointer and DMB number. Find the connection and
- * schedule the tasklet for this connection.
+ * Parameters are smcd device pointer, DMB number, and the DMBE bitmask.
+ * Find the connection and schedule the tasklet for this connection.
  *
  * Context:
  * - Function called in IRQ context from ISM device driver IRQ handler.
  */
-void smcd_handle_irq(struct smcd_dev *smcd, unsigned int dmbno)
+void smcd_handle_irq(struct smcd_dev *smcd, unsigned int dmbno, u16 dmbemask)
 {
 	struct smc_connection *conn = NULL;
 	unsigned long flags;
-- 
2.35.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH net-next 4/4] net/smc: Enable module load on netlink usage
  2022-07-25 14:09 [PATCH net-next 0/4] net/smc: updates 2022-7-25 Wenjia Zhang
                   ` (2 preceding siblings ...)
  2022-07-25 14:09 ` [PATCH net-next 3/4] net/smc: Pass on DMBE bit mask in IRQ handler Wenjia Zhang
@ 2022-07-25 14:10 ` Wenjia Zhang
  2022-07-26  2:54   ` Tony Lu
  2022-07-26  3:31 ` [PATCH net-next 0/4] net/smc: updates 2022-7-25 Tony Lu
  2022-07-27 12:30 ` patchwork-bot+netdevbpf
  5 siblings, 1 reply; 12+ messages in thread
From: Wenjia Zhang @ 2022-07-25 14:10 UTC (permalink / raw)
  To: David Miller, Jakub Kicinski
  Cc: netdev, linux-s390, Heiko Carstens, Karsten Graul,
	Alexandra Winter, Stefan Raspl, Wenjia Zhang

From: Stefan Raspl <raspl@linux.ibm.com>

Previously, the smc and smc_diag modules were automatically loaded as
dependencies of the ism module whenever an ISM device was present.
With the pending rework of the ISM API, the smc module will no longer
automatically be loaded in presence of an ISM device. Usage of an AF_SMC
socket will still trigger loading of the smc modules, but usage of a
netlink socket will not.
This is addressed by setting the correct module aliases.

Signed-off-by: Stefan Raspl <raspl@linux.ibm.com>
Signed-off-by: Wenjia Zhang < wenjia@linux.ibm.com>
---
 net/smc/af_smc.c   | 1 +
 net/smc/smc_diag.c | 1 +
 2 files changed, 2 insertions(+)

diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
index 6e70d9c10b78..79c1318af1fe 100644
--- a/net/smc/af_smc.c
+++ b/net/smc/af_smc.c
@@ -3515,3 +3515,4 @@ MODULE_DESCRIPTION("smc socket address family");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS_NETPROTO(PF_SMC);
 MODULE_ALIAS_TCP_ULP("smc");
+MODULE_ALIAS_GENL_FAMILY(SMC_GENL_FAMILY_NAME);
diff --git a/net/smc/smc_diag.c b/net/smc/smc_diag.c
index 1fca2f90a9c7..80ea7d954ece 100644
--- a/net/smc/smc_diag.c
+++ b/net/smc/smc_diag.c
@@ -268,3 +268,4 @@ module_init(smc_diag_init);
 module_exit(smc_diag_exit);
 MODULE_LICENSE("GPL");
 MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_NETLINK, NETLINK_SOCK_DIAG, 43 /* AF_SMC */);
+MODULE_ALIAS_GENL_FAMILY(SMCR_GENL_FAMILY_NAME);
-- 
2.35.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 1/4] net/smc: Eliminate struct smc_ism_position
  2022-07-25 14:09 ` [PATCH net-next 1/4] net/smc: Eliminate struct smc_ism_position Wenjia Zhang
@ 2022-07-26  2:48   ` Tony Lu
  0 siblings, 0 replies; 12+ messages in thread
From: Tony Lu @ 2022-07-26  2:48 UTC (permalink / raw)
  To: Wenjia Zhang
  Cc: David Miller, Jakub Kicinski, netdev, linux-s390, Heiko Carstens,
	Karsten Graul, Alexandra Winter, Stefan Raspl

On Mon, Jul 25, 2022 at 04:09:57PM +0200, Wenjia Zhang wrote:
> From: Heiko Carstens <hca@linux.ibm.com>
> 
> This struct is used in a single place only, and its usage generates
> inefficient code. Time to clean up!
> 
> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
> Reviewed-and-tested-by: Stefan Raspl <raspl@linux.ibm.com>
> Signed-off-by: Wenjia Zhang < wenjia@linux.ibm.com>

This patch looks good to me.

Reviewed-by: Tony Lu <tonylu@linux.alibaba.com>

> ---
>  net/smc/smc_ism.c | 11 -----------
>  net/smc/smc_ism.h | 20 +++++++++++---------
>  net/smc/smc_tx.c  | 10 +++-------
>  3 files changed, 14 insertions(+), 27 deletions(-)
> 
> diff --git a/net/smc/smc_ism.c b/net/smc/smc_ism.c
> index a2084ecdb97e..c656ef25ee4b 100644
> --- a/net/smc/smc_ism.c
> +++ b/net/smc/smc_ism.c
> @@ -33,17 +33,6 @@ int smc_ism_cantalk(u64 peer_gid, unsigned short vlan_id, struct smcd_dev *smcd)
>  					   vlan_id);
>  }
>  
> -int smc_ism_write(struct smcd_dev *smcd, const struct smc_ism_position *pos,
> -		  void *data, size_t len)
> -{
> -	int rc;
> -
> -	rc = smcd->ops->move_data(smcd, pos->token, pos->index, pos->signal,
> -				  pos->offset, data, len);
> -
> -	return rc < 0 ? rc : 0;
> -}
> -
>  void smc_ism_get_system_eid(u8 **eid)
>  {
>  	if (!smc_ism_v2_capable)
> diff --git a/net/smc/smc_ism.h b/net/smc/smc_ism.h
> index 004b22a13ffa..d6b2db604fe8 100644
> --- a/net/smc/smc_ism.h
> +++ b/net/smc/smc_ism.h
> @@ -28,13 +28,6 @@ struct smc_ism_vlanid {			/* VLAN id set on ISM device */
>  	refcount_t refcnt;		/* Reference count */
>  };
>  
> -struct smc_ism_position {	/* ISM device position to write to */
> -	u64 token;		/* Token of DMB */
> -	u32 offset;		/* Offset into DMBE */
> -	u8 index;		/* Index of DMBE */
> -	u8 signal;		/* Generate interrupt on owner side */
> -};
> -
>  struct smcd_dev;
>  
>  int smc_ism_cantalk(u64 peer_gid, unsigned short vlan_id, struct smcd_dev *dev);
> @@ -45,12 +38,21 @@ int smc_ism_put_vlan(struct smcd_dev *dev, unsigned short vlan_id);
>  int smc_ism_register_dmb(struct smc_link_group *lgr, int buf_size,
>  			 struct smc_buf_desc *dmb_desc);
>  int smc_ism_unregister_dmb(struct smcd_dev *dev, struct smc_buf_desc *dmb_desc);
> -int smc_ism_write(struct smcd_dev *dev, const struct smc_ism_position *pos,
> -		  void *data, size_t len);
>  int smc_ism_signal_shutdown(struct smc_link_group *lgr);
>  void smc_ism_get_system_eid(u8 **eid);
>  u16 smc_ism_get_chid(struct smcd_dev *dev);
>  bool smc_ism_is_v2_capable(void);
>  void smc_ism_init(void);
>  int smcd_nl_get_device(struct sk_buff *skb, struct netlink_callback *cb);
> +
> +static inline int smc_ism_write(struct smcd_dev *smcd, u64 dmb_tok,
> +				unsigned int idx, bool sf, unsigned int offset,
> +				void *data, size_t len)
> +{
> +	int rc;
> +
> +	rc = smcd->ops->move_data(smcd, dmb_tok, idx, sf, offset, data, len);
> +	return rc < 0 ? rc : 0;
> +}
> +
>  #endif
> diff --git a/net/smc/smc_tx.c b/net/smc/smc_tx.c
> index 4e8377657a62..64dedffe9d26 100644
> --- a/net/smc/smc_tx.c
> +++ b/net/smc/smc_tx.c
> @@ -320,15 +320,11 @@ int smc_tx_sendpage(struct smc_sock *smc, struct page *page, int offset,
>  int smcd_tx_ism_write(struct smc_connection *conn, void *data, size_t len,
>  		      u32 offset, int signal)
>  {
> -	struct smc_ism_position pos;
>  	int rc;
>  
> -	memset(&pos, 0, sizeof(pos));
> -	pos.token = conn->peer_token;
> -	pos.index = conn->peer_rmbe_idx;
> -	pos.offset = conn->tx_off + offset;
> -	pos.signal = signal;
> -	rc = smc_ism_write(conn->lgr->smcd, &pos, data, len);
> +	rc = smc_ism_write(conn->lgr->smcd, conn->peer_token,
> +			   conn->peer_rmbe_idx, signal, conn->tx_off + offset,
> +			   data, len);
>  	if (rc)
>  		conn->local_tx_ctrl.conn_state_flags.peer_conn_abort = 1;
>  	return rc;
> -- 
> 2.35.2

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 4/4] net/smc: Enable module load on netlink usage
  2022-07-25 14:10 ` [PATCH net-next 4/4] net/smc: Enable module load on netlink usage Wenjia Zhang
@ 2022-07-26  2:54   ` Tony Lu
  0 siblings, 0 replies; 12+ messages in thread
From: Tony Lu @ 2022-07-26  2:54 UTC (permalink / raw)
  To: Wenjia Zhang
  Cc: David Miller, Jakub Kicinski, netdev, linux-s390, Heiko Carstens,
	Karsten Graul, Alexandra Winter, Stefan Raspl

On Mon, Jul 25, 2022 at 04:10:00PM +0200, Wenjia Zhang wrote:
> From: Stefan Raspl <raspl@linux.ibm.com>
> 
> Previously, the smc and smc_diag modules were automatically loaded as
> dependencies of the ism module whenever an ISM device was present.
> With the pending rework of the ISM API, the smc module will no longer
> automatically be loaded in presence of an ISM device. Usage of an AF_SMC
> socket will still trigger loading of the smc modules, but usage of a
> netlink socket will not.
> This is addressed by setting the correct module aliases.
> 
> Signed-off-by: Stefan Raspl <raspl@linux.ibm.com>
> Signed-off-by: Wenjia Zhang < wenjia@linux.ibm.com>

This patch looks good to me.

Reviewed-by: Tony Lu <tonylu@linux.alibaba.com>

> ---
>  net/smc/af_smc.c   | 1 +
>  net/smc/smc_diag.c | 1 +
>  2 files changed, 2 insertions(+)
> 
> diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
> index 6e70d9c10b78..79c1318af1fe 100644
> --- a/net/smc/af_smc.c
> +++ b/net/smc/af_smc.c
> @@ -3515,3 +3515,4 @@ MODULE_DESCRIPTION("smc socket address family");
>  MODULE_LICENSE("GPL");
>  MODULE_ALIAS_NETPROTO(PF_SMC);
>  MODULE_ALIAS_TCP_ULP("smc");
> +MODULE_ALIAS_GENL_FAMILY(SMC_GENL_FAMILY_NAME);
> diff --git a/net/smc/smc_diag.c b/net/smc/smc_diag.c
> index 1fca2f90a9c7..80ea7d954ece 100644
> --- a/net/smc/smc_diag.c
> +++ b/net/smc/smc_diag.c
> @@ -268,3 +268,4 @@ module_init(smc_diag_init);
>  module_exit(smc_diag_exit);
>  MODULE_LICENSE("GPL");
>  MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_NETLINK, NETLINK_SOCK_DIAG, 43 /* AF_SMC */);
> +MODULE_ALIAS_GENL_FAMILY(SMCR_GENL_FAMILY_NAME);
> -- 
> 2.35.2

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 3/4] net/smc: Pass on DMBE bit mask in IRQ handler
  2022-07-25 14:09 ` [PATCH net-next 3/4] net/smc: Pass on DMBE bit mask in IRQ handler Wenjia Zhang
@ 2022-07-26  3:11   ` Tony Lu
  0 siblings, 0 replies; 12+ messages in thread
From: Tony Lu @ 2022-07-26  3:11 UTC (permalink / raw)
  To: Wenjia Zhang
  Cc: David Miller, Jakub Kicinski, netdev, linux-s390, Heiko Carstens,
	Karsten Graul, Alexandra Winter, Stefan Raspl

On Mon, Jul 25, 2022 at 04:09:59PM +0200, Wenjia Zhang wrote:
> From: Stefan Raspl <raspl@linux.ibm.com>
> 
> Make the DMBE bits, which are passed on individually in ism_move() as
> parameter idx, available to the receiver.
> 
> Signed-off-by: Stefan Raspl <raspl@linux.ibm.com>
> Signed-off-by: Wenjia Zhang < wenjia@linux.ibm.com>

LGTM.

Reviewed-by: Tony Lu <tonylu@linux.alibaba.com>

> ---
>  drivers/s390/net/ism_drv.c | 4 +++-
>  include/net/smc.h          | 2 +-
>  net/smc/smc_ism.c          | 6 +++---
>  3 files changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/s390/net/ism_drv.c b/drivers/s390/net/ism_drv.c
> index 4665e9a0e048..d34bb6ec1490 100644
> --- a/drivers/s390/net/ism_drv.c
> +++ b/drivers/s390/net/ism_drv.c
> @@ -443,6 +443,7 @@ static irqreturn_t ism_handle_irq(int irq, void *data)
>  	struct ism_dev *ism = data;
>  	unsigned long bit, end;
>  	unsigned long *bv;
> +	u16 dmbemask;
>  
>  	bv = (void *) &ism->sba->dmb_bits[ISM_DMB_WORD_OFFSET];
>  	end = sizeof(ism->sba->dmb_bits) * BITS_PER_BYTE - ISM_DMB_BIT_OFFSET;
> @@ -456,9 +457,10 @@ static irqreturn_t ism_handle_irq(int irq, void *data)
>  			break;
>  
>  		clear_bit_inv(bit, bv);
> +		dmbemask = ism->sba->dmbe_mask[bit + ISM_DMB_BIT_OFFSET];
>  		ism->sba->dmbe_mask[bit + ISM_DMB_BIT_OFFSET] = 0;
>  		barrier();
> -		smcd_handle_irq(ism->smcd, bit + ISM_DMB_BIT_OFFSET);
> +		smcd_handle_irq(ism->smcd, bit + ISM_DMB_BIT_OFFSET, dmbemask);
>  	}
>  
>  	if (ism->sba->e) {
> diff --git a/include/net/smc.h b/include/net/smc.h
> index 1868a5014dea..c926d3313e05 100644
> --- a/include/net/smc.h
> +++ b/include/net/smc.h
> @@ -101,5 +101,5 @@ int smcd_register_dev(struct smcd_dev *smcd);
>  void smcd_unregister_dev(struct smcd_dev *smcd);
>  void smcd_free_dev(struct smcd_dev *smcd);
>  void smcd_handle_event(struct smcd_dev *dev, struct smcd_event *event);
> -void smcd_handle_irq(struct smcd_dev *dev, unsigned int bit);
> +void smcd_handle_irq(struct smcd_dev *dev, unsigned int bit, u16 dmbemask);
>  #endif	/* _SMC_H */
> diff --git a/net/smc/smc_ism.c b/net/smc/smc_ism.c
> index e51c0cdff8e0..911fe08bc54b 100644
> --- a/net/smc/smc_ism.c
> +++ b/net/smc/smc_ism.c
> @@ -508,13 +508,13 @@ void smcd_handle_event(struct smcd_dev *smcd, struct smcd_event *event)
>  EXPORT_SYMBOL_GPL(smcd_handle_event);
>  
>  /* SMCD Device interrupt handler. Called from ISM device interrupt handler.
> - * Parameters are smcd device pointer and DMB number. Find the connection and
> - * schedule the tasklet for this connection.
> + * Parameters are smcd device pointer, DMB number, and the DMBE bitmask.
> + * Find the connection and schedule the tasklet for this connection.
>   *
>   * Context:
>   * - Function called in IRQ context from ISM device driver IRQ handler.
>   */
> -void smcd_handle_irq(struct smcd_dev *smcd, unsigned int dmbno)
> +void smcd_handle_irq(struct smcd_dev *smcd, unsigned int dmbno, u16 dmbemask)
>  {
>  	struct smc_connection *conn = NULL;
>  	unsigned long flags;
> -- 
> 2.35.2

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 2/4] s390/ism: Cleanups
  2022-07-25 14:09 ` [PATCH net-next 2/4] s390/ism: Cleanups Wenjia Zhang
@ 2022-07-26  3:13   ` Tony Lu
  0 siblings, 0 replies; 12+ messages in thread
From: Tony Lu @ 2022-07-26  3:13 UTC (permalink / raw)
  To: Wenjia Zhang
  Cc: David Miller, Jakub Kicinski, netdev, linux-s390, Heiko Carstens,
	Karsten Graul, Alexandra Winter, Stefan Raspl

On Mon, Jul 25, 2022 at 04:09:58PM +0200, Wenjia Zhang wrote:
> From: Stefan Raspl <raspl@linux.ibm.com>
> 
> Reworked signature of the function to retrieve the system EID: No plausible
> reason to use a double pointer. And neither to pass in the device as an
> argument, as this identifier is by definition per system, not per device.
> Plus some minor consistency edits.
> 
> Signed-off-by: Stefan Raspl <raspl@linux.ibm.com>
> Signed-off-by: Wenjia Zhang < wenjia@linux.ibm.com>

LGTM.

Reviewed-by: Tony Lu <tonylu@linux.alibaba.com>

> ---
>  drivers/s390/net/ism_drv.c | 11 +++++------
>  include/net/smc.h          |  2 +-
>  net/smc/smc_ism.c          |  2 +-
>  3 files changed, 7 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/s390/net/ism_drv.c b/drivers/s390/net/ism_drv.c
> index 5f7e28de8b15..4665e9a0e048 100644
> --- a/drivers/s390/net/ism_drv.c
> +++ b/drivers/s390/net/ism_drv.c
> @@ -409,20 +409,19 @@ static void ism_create_system_eid(void)
>  	memcpy(&SYSTEM_EID.type, tmp, 4);
>  }
>  
> -static void ism_get_system_eid(struct smcd_dev *smcd, u8 **eid)
> +static u8 *ism_get_system_eid(void)
>  {
> -	*eid = &SYSTEM_EID.seid_string[0];
> +	return SYSTEM_EID.seid_string;
>  }
>  
>  static u16 ism_get_chid(struct smcd_dev *smcd)
>  {
> -	struct ism_dev *ismdev;
> +	struct ism_dev *ism = (struct ism_dev *)smcd->priv;
>  
> -	ismdev = (struct ism_dev *)smcd->priv;
> -	if (!ismdev || !ismdev->pdev)
> +	if (!ism || !ism->pdev)
>  		return 0;
>  
> -	return to_zpci(ismdev->pdev)->pchid;
> +	return to_zpci(ism->pdev)->pchid;
>  }
>  
>  static void ism_handle_event(struct ism_dev *ism)
> diff --git a/include/net/smc.h b/include/net/smc.h
> index 37f829d9c6e5..1868a5014dea 100644
> --- a/include/net/smc.h
> +++ b/include/net/smc.h
> @@ -72,7 +72,7 @@ struct smcd_ops {
>  	int (*move_data)(struct smcd_dev *dev, u64 dmb_tok, unsigned int idx,
>  			 bool sf, unsigned int offset, void *data,
>  			 unsigned int size);
> -	void (*get_system_eid)(struct smcd_dev *dev, u8 **eid);
> +	u8* (*get_system_eid)(void);
>  	u16 (*get_chid)(struct smcd_dev *dev);
>  };
>  
> diff --git a/net/smc/smc_ism.c b/net/smc/smc_ism.c
> index c656ef25ee4b..e51c0cdff8e0 100644
> --- a/net/smc/smc_ism.c
> +++ b/net/smc/smc_ism.c
> @@ -429,7 +429,7 @@ int smcd_register_dev(struct smcd_dev *smcd)
>  	if (list_empty(&smcd_dev_list.list)) {
>  		u8 *system_eid = NULL;
>  
> -		smcd->ops->get_system_eid(smcd, &system_eid);
> +		system_eid = smcd->ops->get_system_eid();
>  		if (system_eid[24] != '0' || system_eid[28] != '0') {
>  			smc_ism_v2_capable = true;
>  			memcpy(smc_ism_v2_system_eid, system_eid,
> -- 
> 2.35.2

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 0/4] net/smc: updates 2022-7-25
  2022-07-25 14:09 [PATCH net-next 0/4] net/smc: updates 2022-7-25 Wenjia Zhang
                   ` (3 preceding siblings ...)
  2022-07-25 14:10 ` [PATCH net-next 4/4] net/smc: Enable module load on netlink usage Wenjia Zhang
@ 2022-07-26  3:31 ` Tony Lu
  2022-07-26  8:02   ` Wenjia Zhang
  2022-07-27 12:30 ` patchwork-bot+netdevbpf
  5 siblings, 1 reply; 12+ messages in thread
From: Tony Lu @ 2022-07-26  3:31 UTC (permalink / raw)
  To: Wenjia Zhang
  Cc: David Miller, Jakub Kicinski, netdev, linux-s390, Heiko Carstens,
	Karsten Graul, Alexandra Winter, Stefan Raspl

On Mon, Jul 25, 2022 at 04:09:56PM +0200, Wenjia Zhang wrote:
> Hi Dave & Jakub,
> 
> please apply the following patches to netdev's net-next tree.
> 
> These patches do some preparation to make ISM available for uses beyond
> SMC-D, and a bunch of cleanups.
> 
> Thanks,
> Wenjia

Hello Wenjia,

Making ISM available for others sounds great. I proposed a RFC [1] last
week. The RFC brings an ISM-like device to accelerate inter-VM scenario.
I am wondering the plan about this, which may help us. And hope to hear
from you about the RFC [1]. Thank you.

[1] https://lore.kernel.org/all/20220720170048.20806-1-tonylu@linux.alibaba.com/

Cheers,
Tony Lu

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 0/4] net/smc: updates 2022-7-25
  2022-07-26  3:31 ` [PATCH net-next 0/4] net/smc: updates 2022-7-25 Tony Lu
@ 2022-07-26  8:02   ` Wenjia Zhang
  0 siblings, 0 replies; 12+ messages in thread
From: Wenjia Zhang @ 2022-07-26  8:02 UTC (permalink / raw)
  To: Tony Lu
  Cc: David Miller, Jakub Kicinski, netdev, linux-s390, Heiko Carstens,
	Karsten Graul, Alexandra Winter, Stefan Raspl


On 26.07.22 05:31, Tony Lu wrote:
> On Mon, Jul 25, 2022 at 04:09:56PM +0200, Wenjia Zhang wrote:
>> Hi Dave & Jakub,
>>
>> please apply the following patches to netdev's net-next tree.
>>
>> These patches do some preparation to make ISM available for uses beyond
>> SMC-D, and a bunch of cleanups.
>>
>> Thanks,
>> Wenjia
> 
> Hello Wenjia,
> 
> Making ISM available for others sounds great. I proposed a RFC [1] last
> week. The RFC brings an ISM-like device to accelerate inter-VM scenario.
> I am wondering the plan about this, which may help us. And hope to hear
> from you about the RFC [1]. Thank you.
> 
> [1] https://lore.kernel.org/all/20220720170048.20806-1-tonylu@linux.alibaba.com/
> 
> Cheers,
> Tony Lu

Hi Tony,

Thank you for the review first of all!

Besides this serie of patches, we are working on some follow-on patches. 
If you need, we can send you an RFC, so that you can adjust code 
according to it.

About the RFC you mentioned, it does look appealing even for us. But 
still some in-house discussions are going on in order to make sure there 
would be no risk for us. We will let you know as soon as we reach a 
consensus.

Best
Wenjia

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 0/4] net/smc: updates 2022-7-25
  2022-07-25 14:09 [PATCH net-next 0/4] net/smc: updates 2022-7-25 Wenjia Zhang
                   ` (4 preceding siblings ...)
  2022-07-26  3:31 ` [PATCH net-next 0/4] net/smc: updates 2022-7-25 Tony Lu
@ 2022-07-27 12:30 ` patchwork-bot+netdevbpf
  5 siblings, 0 replies; 12+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-07-27 12:30 UTC (permalink / raw)
  To: Wenjia Zhang; +Cc: davem, kuba, netdev, linux-s390, hca, kgraul, wintera, raspl

Hello:

This series was applied to netdev/net-next.git (master)
by David S. Miller <davem@davemloft.net>:

On Mon, 25 Jul 2022 16:09:56 +0200 you wrote:
> Hi Dave & Jakub,
> 
> please apply the following patches to netdev's net-next tree.
> 
> These patches do some preparation to make ISM available for uses beyond
> SMC-D, and a bunch of cleanups.
> 
> [...]

Here is the summary with links:
  - [net-next,1/4] net/smc: Eliminate struct smc_ism_position
    https://git.kernel.org/netdev/net-next/c/eb481b02bd18
  - [net-next,2/4] s390/ism: Cleanups
    https://git.kernel.org/netdev/net-next/c/0a2f4f9893c8
  - [net-next,3/4] net/smc: Pass on DMBE bit mask in IRQ handler
    https://git.kernel.org/netdev/net-next/c/8b2fed8e2712
  - [net-next,4/4] net/smc: Enable module load on netlink usage
    https://git.kernel.org/netdev/net-next/c/28ec53f3a830

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2022-07-27 12:31 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-25 14:09 [PATCH net-next 0/4] net/smc: updates 2022-7-25 Wenjia Zhang
2022-07-25 14:09 ` [PATCH net-next 1/4] net/smc: Eliminate struct smc_ism_position Wenjia Zhang
2022-07-26  2:48   ` Tony Lu
2022-07-25 14:09 ` [PATCH net-next 2/4] s390/ism: Cleanups Wenjia Zhang
2022-07-26  3:13   ` Tony Lu
2022-07-25 14:09 ` [PATCH net-next 3/4] net/smc: Pass on DMBE bit mask in IRQ handler Wenjia Zhang
2022-07-26  3:11   ` Tony Lu
2022-07-25 14:10 ` [PATCH net-next 4/4] net/smc: Enable module load on netlink usage Wenjia Zhang
2022-07-26  2:54   ` Tony Lu
2022-07-26  3:31 ` [PATCH net-next 0/4] net/smc: updates 2022-7-25 Tony Lu
2022-07-26  8:02   ` Wenjia Zhang
2022-07-27 12:30 ` patchwork-bot+netdevbpf

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.