* [PATCH net-next v2 1/4] net/smc: Eliminate struct smc_ism_position
2022-07-26 10:03 [PATCH net-next v2 0/4] net/smc: updates 2022-07-25 Wenjia Zhang
@ 2022-07-26 10:03 ` Wenjia Zhang
2022-07-26 10:03 ` [PATCH net-next v2 2/4] s390/ism: Cleanups Wenjia Zhang
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Wenjia Zhang @ 2022-07-26 10:03 UTC (permalink / raw)
To: David Miller, Jakub Kicinski
Cc: netdev, linux-s390, Heiko Carstens, Karsten Graul, Stefan Raspl,
Alexandra Winter, Tony Lu, 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>
Reviewed-by: Tony Lu <tonylu@linux.alibaba.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] 6+ messages in thread* [PATCH net-next v2 2/4] s390/ism: Cleanups
2022-07-26 10:03 [PATCH net-next v2 0/4] net/smc: updates 2022-07-25 Wenjia Zhang
2022-07-26 10:03 ` [PATCH net-next v2 1/4] net/smc: Eliminate struct smc_ism_position Wenjia Zhang
@ 2022-07-26 10:03 ` Wenjia Zhang
2022-07-26 10:03 ` [PATCH net-next v2 3/4] net/smc: Pass on DMBE bit mask in IRQ handler Wenjia Zhang
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Wenjia Zhang @ 2022-07-26 10:03 UTC (permalink / raw)
To: David Miller, Jakub Kicinski
Cc: netdev, linux-s390, Heiko Carstens, Karsten Graul, Stefan Raspl,
Alexandra Winter, Tony Lu, 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>
Reviewed-by: Tony Lu <tonylu@linux.alibaba.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] 6+ messages in thread* [PATCH net-next v2 3/4] net/smc: Pass on DMBE bit mask in IRQ handler
2022-07-26 10:03 [PATCH net-next v2 0/4] net/smc: updates 2022-07-25 Wenjia Zhang
2022-07-26 10:03 ` [PATCH net-next v2 1/4] net/smc: Eliminate struct smc_ism_position Wenjia Zhang
2022-07-26 10:03 ` [PATCH net-next v2 2/4] s390/ism: Cleanups Wenjia Zhang
@ 2022-07-26 10:03 ` Wenjia Zhang
2022-07-26 10:03 ` [PATCH net-next v2 4/4] net/smc: Enable module load on netlink usage Wenjia Zhang
2022-07-27 12:30 ` [PATCH net-next v2 0/4] net/smc: updates 2022-07-25 patchwork-bot+netdevbpf
4 siblings, 0 replies; 6+ messages in thread
From: Wenjia Zhang @ 2022-07-26 10:03 UTC (permalink / raw)
To: David Miller, Jakub Kicinski
Cc: netdev, linux-s390, Heiko Carstens, Karsten Graul, Stefan Raspl,
Alexandra Winter, Tony Lu, 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>
Reviewed-by: Tony Lu <tonylu@linux.alibaba.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] 6+ messages in thread* [PATCH net-next v2 4/4] net/smc: Enable module load on netlink usage
2022-07-26 10:03 [PATCH net-next v2 0/4] net/smc: updates 2022-07-25 Wenjia Zhang
` (2 preceding siblings ...)
2022-07-26 10:03 ` [PATCH net-next v2 3/4] net/smc: Pass on DMBE bit mask in IRQ handler Wenjia Zhang
@ 2022-07-26 10:03 ` Wenjia Zhang
2022-07-27 12:30 ` [PATCH net-next v2 0/4] net/smc: updates 2022-07-25 patchwork-bot+netdevbpf
4 siblings, 0 replies; 6+ messages in thread
From: Wenjia Zhang @ 2022-07-26 10:03 UTC (permalink / raw)
To: David Miller, Jakub Kicinski
Cc: netdev, linux-s390, Heiko Carstens, Karsten Graul, Stefan Raspl,
Alexandra Winter, Tony Lu, 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>
Reviewed-by: Tony Lu <tonylu@linux.alibaba.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] 6+ messages in thread* Re: [PATCH net-next v2 0/4] net/smc: updates 2022-07-25
2022-07-26 10:03 [PATCH net-next v2 0/4] net/smc: updates 2022-07-25 Wenjia Zhang
` (3 preceding siblings ...)
2022-07-26 10:03 ` [PATCH net-next v2 4/4] net/smc: Enable module load on netlink usage Wenjia Zhang
@ 2022-07-27 12:30 ` patchwork-bot+netdevbpf
4 siblings, 0 replies; 6+ 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, raspl, wintera,
tonylu
Hello:
This series was applied to netdev/net-next.git (master)
by David S. Miller <davem@davemloft.net>:
On Tue, 26 Jul 2022 12:03:26 +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,v2,1/4] net/smc: Eliminate struct smc_ism_position
https://git.kernel.org/netdev/net-next/c/eb481b02bd18
- [net-next,v2,2/4] s390/ism: Cleanups
https://git.kernel.org/netdev/net-next/c/0a2f4f9893c8
- [net-next,v2,3/4] net/smc: Pass on DMBE bit mask in IRQ handler
https://git.kernel.org/netdev/net-next/c/8b2fed8e2712
- [net-next,v2,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] 6+ messages in thread