Module Name:    src
Committed By:   palle
Date:           Wed Feb  5 20:46:27 UTC 2025

Modified Files:
        src/sys/arch/sparc64/dev: ldc.c ldcvar.h

Log Message:
sun4v ldc: improve the ldc_send_xxx functions so they can print an error 
message and return a proper error code


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/sparc64/dev/ldc.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/sparc64/dev/ldcvar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/sparc64/dev/ldc.c
diff -u src/sys/arch/sparc64/dev/ldc.c:1.8 src/sys/arch/sparc64/dev/ldc.c:1.9
--- src/sys/arch/sparc64/dev/ldc.c:1.8	Wed Dec 20 05:33:58 2023
+++ src/sys/arch/sparc64/dev/ldc.c	Wed Feb  5 20:46:26 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: ldc.c,v 1.8 2023/12/20 05:33:58 thorpej Exp $	*/
+/*	$NetBSD: ldc.c,v 1.9 2025/02/05 20:46:26 palle Exp $	*/
 /*	$OpenBSD: ldc.c,v 1.12 2015/03/21 18:02:58 kettenis Exp $	*/
 /*
  * Copyright (c) 2009 Mark Kettenis
@@ -38,10 +38,10 @@ void	ldc_rx_ctrl_rtr(struct ldc_conn *, 
 void	ldc_rx_ctrl_rts(struct ldc_conn *, struct ldc_pkt *);
 void	ldc_rx_ctrl_rdx(struct ldc_conn *, struct ldc_pkt *);
 
-void	ldc_send_ack(struct ldc_conn *);
-void	ldc_send_rtr(struct ldc_conn *);
-void	ldc_send_rts(struct ldc_conn *);
-void	ldc_send_rdx(struct ldc_conn *);
+int	ldc_send_ack(struct ldc_conn *);
+int	ldc_send_rtr(struct ldc_conn *);
+int	ldc_send_rts(struct ldc_conn *);
+int	ldc_send_rdx(struct ldc_conn *);
 
 void
 ldc_rx_ctrl(struct ldc_conn *lc, struct ldc_pkt *lp)
@@ -242,7 +242,7 @@ ldc_rx_data(struct ldc_conn *lc, struct 
 		lc->lc_rx_data(lc, (struct ldc_pkt *)lc->lc_msg);
 }
 
-void
+int
 ldc_send_vers(struct ldc_conn *lc)
 {
 	struct ldc_pkt *lp;
@@ -253,7 +253,7 @@ ldc_send_vers(struct ldc_conn *lc)
 	err = hv_ldc_tx_get_state(lc->lc_id, &tx_head, &tx_tail, &tx_state);
 	if (err != H_EOK || tx_state != LDC_CHANNEL_UP) {
 		mutex_exit(&lc->lc_txq->lq_mtx);
-		return;
+		return EIO;
 	}
 
 	lp = (struct ldc_pkt *)(uintptr_t)(lc->lc_txq->lq_va + tx_tail);
@@ -261,8 +261,8 @@ ldc_send_vers(struct ldc_conn *lc)
 	lp->type = LDC_CTRL;
 	lp->stype = LDC_INFO;
 	lp->ctrl = LDC_VERS;
-	lp->major = 1;
-	lp->minor = 0;
+	lp->major = LDC_VERSION_MAJOR;
+	lp->minor = LDC_VERSION_MINOR;
 	DPRINTF(("ldc_send_vers() major %d minor %d\n", lp->major, lp->minor));
 
 	tx_tail += sizeof(*lp);
@@ -271,15 +271,16 @@ ldc_send_vers(struct ldc_conn *lc)
 	if (err != H_EOK) {
 		printf("%s: hv_ldc_tx_set_qtail: %d\n", __func__, err);
 		mutex_exit(&lc->lc_txq->lq_mtx);
-		return;
+		return EIO;
 	}
 
 	lc->lc_state = LDC_SND_VERS;
 	DPRINTF(("ldc_send_vers() setting lc->lc_state to %d\n", lc->lc_state));
 	mutex_exit(&lc->lc_txq->lq_mtx);
+	return 0;
 }
 
-void
+int
 ldc_send_ack(struct ldc_conn *lc)
 {
 	struct ldc_pkt *lp;
@@ -290,7 +291,8 @@ ldc_send_ack(struct ldc_conn *lc)
 	err = hv_ldc_tx_get_state(lc->lc_id, &tx_head, &tx_tail, &tx_state);
 	if (err != H_EOK || tx_state != LDC_CHANNEL_UP) {
 		mutex_exit(&lc->lc_txq->lq_mtx);
-		return;
+		printf("ldc_send_ack() err %d tx_state %lu\n", err, tx_state);
+		return EIO;
 	}
 
 	lp = (struct ldc_pkt *)(uintptr_t)(lc->lc_txq->lq_va + tx_tail);
@@ -307,15 +309,16 @@ ldc_send_ack(struct ldc_conn *lc)
 	if (err != H_EOK) {
 		printf("%s: hv_ldc_tx_set_qtail: %d\n", __func__, err);
 		mutex_exit(&lc->lc_txq->lq_mtx);
-		return;
+		return EIO;
 	}
 
 	lc->lc_state = LDC_RCV_VERS;
 	DPRINTF(("ldc_send_ack() setting lc->lc_state to %d\n", lc->lc_state));
 	mutex_exit(&lc->lc_txq->lq_mtx);
+	return 0;
 }
 
-void
+int
 ldc_send_rts(struct ldc_conn *lc)
 {
 	struct ldc_pkt *lp;
@@ -326,7 +329,8 @@ ldc_send_rts(struct ldc_conn *lc)
 	err = hv_ldc_tx_get_state(lc->lc_id, &tx_head, &tx_tail, &tx_state);
 	if (err != H_EOK || tx_state != LDC_CHANNEL_UP) {
 		mutex_exit(&lc->lc_txq->lq_mtx);
-		return;
+		printf("ldc_send_rts() err %d tx_state %lu\n", err, tx_state);
+		return EIO;
 	}
 
 	lp = (struct ldc_pkt *)(uintptr_t)(lc->lc_txq->lq_va + tx_tail);
@@ -343,15 +347,16 @@ ldc_send_rts(struct ldc_conn *lc)
 	if (err != H_EOK) {
 		printf("%s: hv_ldc_tx_set_qtail: %d\n", __func__, err);
 		mutex_exit(&lc->lc_txq->lq_mtx);
-		return;
+		return EIO;
 	}
 
 	lc->lc_state = LDC_SND_RTS;
 	DPRINTF(("ldc_send_rts() setting lc->lc_state to %d\n", lc->lc_state));
 	mutex_exit(&lc->lc_txq->lq_mtx);
+	return 0;
 }
 
-void
+int
 ldc_send_rtr(struct ldc_conn *lc)
 {
 	struct ldc_pkt *lp;
@@ -362,7 +367,8 @@ ldc_send_rtr(struct ldc_conn *lc)
 	err = hv_ldc_tx_get_state(lc->lc_id, &tx_head, &tx_tail, &tx_state);
 	if (err != H_EOK || tx_state != LDC_CHANNEL_UP) {
 		mutex_exit(&lc->lc_txq->lq_mtx);
-		return;
+		printf("ldc_send_rtr() err %d state %lu\n", err, tx_state);
+		return EIO;
 	}
 
 	lp = (struct ldc_pkt *)(uintptr_t)(lc->lc_txq->lq_va + tx_tail);
@@ -379,15 +385,16 @@ ldc_send_rtr(struct ldc_conn *lc)
 	if (err != H_EOK) {
 		printf("%s: hv_ldc_tx_set_qtail: %d\n", __func__, err);
 		mutex_exit(&lc->lc_txq->lq_mtx);
-		return;
+		return EIO;
 	}
 
 	lc->lc_state = LDC_SND_RTR;
 	DPRINTF(("ldc_send_rtr() setting lc->lc_state to %d\n", lc->lc_state));
 	mutex_exit(&lc->lc_txq->lq_mtx);
+	return 0;
 }
 
-void
+int
 ldc_send_rdx(struct ldc_conn *lc)
 {
 	struct ldc_pkt *lp;
@@ -398,7 +405,8 @@ ldc_send_rdx(struct ldc_conn *lc)
 	err = hv_ldc_tx_get_state(lc->lc_id, &tx_head, &tx_tail, &tx_state);
 	if (err != H_EOK || tx_state != LDC_CHANNEL_UP) {
 		mutex_exit(&lc->lc_txq->lq_mtx);
-		return;
+		printf("ldc_send_rdx() err %d state %lu\n", err, tx_state);
+		return EIO;
 	}
 
 	lp = (struct ldc_pkt *)(uintptr_t)(lc->lc_txq->lq_va + tx_tail);
@@ -415,12 +423,13 @@ ldc_send_rdx(struct ldc_conn *lc)
 	if (err != H_EOK) {
 		printf("%s: hv_ldc_tx_set_qtail: %d\n", __func__, err);
 		mutex_exit(&lc->lc_txq->lq_mtx);
-		return;
+		return EIO;
 	}
 
 	lc->lc_state = LDC_SND_RDX;
 	DPRINTF(("ldc_send_rdx() setting lc->lc_state to %d\n", lc->lc_state));
 	mutex_exit(&lc->lc_txq->lq_mtx);
+	return 0;
 }
 
 int
@@ -436,6 +445,7 @@ ldc_send_unreliable(struct ldc_conn *lc,
 	err = hv_ldc_tx_get_state(lc->lc_id, &tx_head, &tx_tail, &tx_state);
 	if (err != H_EOK || tx_state != LDC_CHANNEL_UP) {
 		mutex_exit(&lc->lc_txq->lq_mtx);
+		printf("ldc_send_unrealiable() err %d state %lu\n", err, tx_state);
 		return (EIO);
 	}
 

Index: src/sys/arch/sparc64/dev/ldcvar.h
diff -u src/sys/arch/sparc64/dev/ldcvar.h:1.1 src/sys/arch/sparc64/dev/ldcvar.h:1.2
--- src/sys/arch/sparc64/dev/ldcvar.h:1.1	Fri Aug 19 19:02:07 2016
+++ src/sys/arch/sparc64/dev/ldcvar.h	Wed Feb  5 20:46:26 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: ldcvar.h,v 1.1 2016/08/19 19:02:07 palle Exp $	*/
+/*	$NetBSD: ldcvar.h,v 1.2 2025/02/05 20:46:26 palle Exp $	*/
 /*	$OpenBSD: ldcvar.h,v 1.6 2014/09/29 17:43:29 kettenis Exp $	*/
 /*
  * Copyright (c) 2009 Mark Kettenis
@@ -121,7 +121,7 @@ struct ldc_conn {
 void	ldc_rx_ctrl(struct ldc_conn *, struct ldc_pkt *);
 void	ldc_rx_data(struct ldc_conn *, struct ldc_pkt *);
 
-void	ldc_send_vers(struct ldc_conn *);
+int	ldc_send_vers(struct ldc_conn *);
 int	ldc_send_unreliable(struct ldc_conn *, void *, size_t);
 
 void	ldc_reset(struct ldc_conn *);

Reply via email to