[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: fxp at pci on arm32 and bus_dmamap_sync()



In message <200007241221.e6OCLpr10269@mirage.ceres.dti.ne.jp>
	on Mon, 24 Jul 2000 21:21:51 +0900 (JST),
	Izumi Tsutsui <tsutsui@ceres.dti.ne.jp> wrote:
> あるいは FXP_INIT_RFABUF() で FXP_RFA_CONTROL_S の suspend bit
> もたてて最後のバッファまで使ってしまったら自動的に suspend する
> ようにすればよい?
これもやってみました。何となく、NetBSDに関しては、

o ABORT発行
o suspend
o とある方から貰った「本質的な修正ではないけど、pciを読むことを避けて
  性能を向上させる修正」

のいずれかを当てると、殆んど発生しなくなります。(発生させることができ
ませんでした。)  ここまでで、会社の引っ越しのためターゲット・マシンは
明日しまいこみます。:-(

--
神戸 隆博(かんべ たかひろ) at home


Index: i82557.c
===================================================================
RCS file: /cvsroot/syssrc/sys/dev/ic/i82557.c,v
retrieving revision 1.36
diff -u -u -r1.36 i82557.c
--- i82557.c	2000/06/29 16:53:48	1.36
+++ i82557.c	2000/07/19 09:56:09
@@ -895,6 +895,8 @@
 	}
 
 	while ((statack = CSR_READ_1(sc, FXP_CSR_SCB_STATACK)) != 0) {
+		int rnr = 0;
+
 		claimed = 1;
 
 		/*
@@ -927,6 +929,9 @@
 				goto do_transmit;
 			}
 
+			if (rxstat & FXP_RFA_STATUS_RNR)
+				rnr = 1;
+
 			IF_DEQUEUE(&sc->sc_rxq, m);
 
 			FXP_RXBUFSYNC(sc, m, BUS_DMASYNC_POSTREAD);
@@ -997,7 +1002,7 @@
 		}
 
  do_transmit:
-		if (statack & FXP_SCB_STATACK_RNR) {
+		if (rnr) {
 			rxmap = M_GETCTX(sc->sc_rxq.ifq_head, bus_dmamap_t);
 			fxp_scb_wait(sc);
 			CSR_WRITE_4(sc, FXP_CSR_SCB_GENERAL,