From owner-announce-jp@jp.freebsd.org Fri Sep 24 16:20:18 1999 Received: (from daemon@localhost) by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id QAA51239; Fri, 24 Sep 1999 16:20:18 +0900 (JST) (envelope-from owner-announce-jp@jp.FreeBSD.org) Date: Fri, 24 Sep 1999 14:32:39 +0900 (JST) Message-Id: <199909240532.OAA42791@castle.jp.freebsd.org> To: announce-jp@jp.freebsd.org Reply-To: FreeBSD98-hackers@jp.freebsd.org From: Nobuyuki Koganemaru X-ML-maintainer: owner-announce-jp@jp.FreeBSD.org Precedence: list X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+990727 X-Sequence: announce-jp 310 Subject: ANNOUNCE: FreeBSD(98) 3.2R-Rev01 Errata.98 r03 Errors-To: owner-announce-jp@jp.freebsd.org Sender: owner-announce-jp@jp.freebsd.org FreeBSD(98) 移植チームよりのお知らせです。 FreeBSD(98) 移植チームではリリース後に見つかった障害の情報を Errata.98 ファイルで提供することになりました。本アナウンスを行うとともに配布ディレ クトリの 98readme に置かれます。 -- FreeBSD(98) 3.2R-Rev01 障害情報 日付: 平成11年(1999年)07月20日 (火) 03 版 平成11年(1999年)09月23日 (木) 本ファイルは FreeBSD(98) 3.2R-Rev01 リリース後に見つかった障害の情報を記述 しています。 ---- システム更新情報: ・Develop.98 の中に記述している。FreeBSD(98)-current の公開場所が違ってい ました。次がその差分です。 --- Develop.98.orig Tue Jun 22 02:46:14 1999 +++ Develop.98 Wed Jul 7 21:59:12 1999 @@ -124,7 +124,7 @@ ます。これが FreeBSD(98)-current を一般に公開している理由です。 FreeBSD(98)-current は、 - から + から anonymous FTP で入手することが可能です。また、sup により変更した部分の みを入手する手段を設けています。current ベースの FreeBSD(98) は、カーネ ルソース (/usr/src/sys) は既にマージされているため cvsup を使用すること ・PC-9821Cb 等の COM1 が FIFO モードには対応しているが V-FAST モードには対 応していない機種では、COM1 を V-FAST モードとして認識してしまうため使用 することができませんでした。 このパッチを当てる事により、V-FAST 未対応として正しく認識するようになり ます。 <03 版 修正情報> 01 版で紹介したパッチでは、PC-9801NS/R 等の古い PC-98 で、逆に誤認識され ることが判明したため、パッチを差し替えました。 なお、以前のパッチを適応しており、現在、特に問題が起きていない場合には、 あえて新しいパッチを適応しなおす必要はありません。 ---- ここから ---- --- sys/pc98/pc98/sio.c.orig Thu Jun 24 00:30:22 1999 +++ sys/pc98/pc98/sio.c Thu Sep 9 22:21:17 1999 @@ -4713,10 +4713,19 @@ iod->irq = 4; /* XXX check new internal port. */ - outb(0x138, 0); + outb(0x13a, 0x8c); DELAY(10); for (tmp = 0; tmp < 100; tmp++) { - if ((inb(0x138) & 1) == 0) { + if ((inb(0x13a) & 0x80) != 0) { + tmp = 0; + break; + } + DELAY(1); + } + outb(0x13a, 0); + DELAY(10); + for (; tmp < 100; tmp++) { + if ((inb(0x13a) & 0x80) == 0) { PC98SIO_baud_rate_port(if_type) = 0x13a; if_8251_type[if_type].name = " (internal fast)"; if_8251_type[if_type].speedtab = pc98fast_speedtab; ---- ここまで ---- <02 版で追加> ・Develop.98 の中に記述している。FreeBSD(98)-current の公開場所の誤りの他 に supfile のサンプルの記述も誤っていました。次がその差分です。 ---- ここから ---- --- Develop.98.orig Tue Jun 22 02:46:14 1999 +++ Develop.98 Fri Jul 23 03:38:58 1999 @@ -133,15 +133,16 @@ 考にして取得してください。以下の sample には sys が含まれていますが、 sys は cvsup で本家のソースツリーのものを使用した方が良いと思います。 - sys host=turnip.eps.nagoya-u.ac.jp hostbase=/usr/local/sup/FreeBSD - base=/usr/sup prefix=/usr/src98 delete old - usr.sbin host=turnip.eps.nagoya-u.ac.jp - hostbase=/usr/local/sup/FreeBSD base=/usr/sup prefix=/usr/src98 - delete old - sbin host=turnip.eps.nagoya-u.ac.jp hostbase=/usr/local/sup/FreeBSD - base=/usr/sup prefix=/usr/src98 delete old - etc host=turnip.eps.nagoya-u.ac.jp hostbase=/usr/local/sup/FreeBSD - base=/usr/sup prefix=/usr/src98 delete old + sys host=bsd.eps.nagoya-u.ac.jp hostbase=/ftp/pub \ + base=/usr/sup/FreeBSD98 prefix=/usr/src98 delete old + usr.sbin host=bsd.eps.nagoya-u.ac.jp hostbase=/ftp/pub \ + base=/usr/sup/FreeBSD98 prefix=/usr/src98 delete old + sbin host=bsd.eps.nagoya-u.ac.jp hostbase=/ftp/pub \ + base=/usr/sup/FreeBSD98 prefix=/usr/src98 delete old + doc host=bsd.eps.nagoya-u.ac.jp hostbase=/ftp/pub \ + base=/usr/sup/FreeBSD98 prefix=/usr/src98 delete old + share host=bsd.eps.nagoya-u.ac.jp hostbase=/ftp/pub \ + base=/usr/sup/FreeBSD98 prefix=/usr/src98 delete old これにより、/usr/src98 の下に PC-98 用のソースコードが格納されます。 prefix を /usr/src にすれば、cvsup などで取得したファイルに上書きされま ---- ここまで ---- ・COMPAT_ATDISK を有効にしてその機能を使用しようすると、panic します。 次のパッチあててください。 ---- ここから ---- --- sys/pc98/pc98/diskslice_machdep.c.orig Sat Dec 5 07:54:54 1998 +++ sys/pc98/pc98/diskslice_machdep.c Tue Aug 17 22:25:52 1999 @@ -325,7 +325,6 @@ /* IBM-PC HDD */ bp->b_flags = B_INVAL | B_AGE; brelse(bp); - free(ssp, M_DEVBUF); return atcompat_dsinit(dname, dev, strat, lp, sspp); } #endif ---- ここまで ---- ・次のような誤ったコードがありました。この誤りによりどのような問題が生じるか は確認されていません。 ---- ここから ---- --- sys/pc98/pc98/sio.c.orig Mon Jul 19 15:27:46 1999 +++ sys/pc98/pc98/sio.c Tue Aug 17 22:33:15 1999 @@ -3549,7 +3549,7 @@ if (com->gone) return; #ifdef PC98 - if (IS_8251(com->pc98_if_type)) + if (!IS_8251(com->pc98_if_type)) port_shift = if_16550a_type[com->pc98_if_type & 0x0f].port_shift; #endif disable_intr(); ---- ここまで ---- <03 版で追加> ・カーネルブート時、一部の機種で unload 後に load ができない問題があります。 /kernel 以外のカーネルが読めないので、カーネル再構築でミスした場合などに 復旧が困難になります。次のパッチを当てた後、 # cd /sys/boot # make obj depend && make && make install を行います。 ---- ここから ---- --- sys/boot/pc98/libpc98/biosdisk.c.orig Fri Jun 11 22:48:57 1999 +++ sys/boot/pc98/libpc98/biosdisk.c Tue Sep 21 01:18:18 1999 @@ -764,7 +764,7 @@ /* Decide whether we have to bounce */ #ifdef PC98 - if (((od->od_unit & 0xf0) == 0x90 || (od->od_unit & 0xf0) == 0x30) && + if ( #else if ((od->od_unit < 0x80) && #endif @@ -776,7 +776,11 @@ * need to. Use the bottom half unless there is a break there, in which case we * use the top half. */ +#ifdef PC98 + x = min(od->od_sec, blks); +#else x = min(FLOPPY_BOUNCEBUF, blks); +#endif bbuf = malloc(x * 2 * BIOSDISK_SECSIZE); if (((u_int32_t)VTOP(bbuf) & 0xffff0000) == ((u_int32_t)VTOP(dest + x * BIOSDISK_SECSIZE) & 0xffff0000)) { breg = bbuf; @@ -817,18 +821,21 @@ /* if retrying, reset the drive */ if (retry > 0) { #ifdef PC98 + v86.ctl = V86_FLAGS; + v86.addr = 0x1b; + v86.eax = 0x0300 | od->od_unit; #else v86.ctl = V86_FLAGS; v86.addr = 0x13; v86.eax = 0; v86.edx = od->od_unit; - v86int(); #endif + v86int(); } /* build request XXX support EDD requests too */ + v86.ctl = V86_FLAGS; #ifdef PC98 - v86.ctl = 0; v86.addr = 0x1b; if (od->od_flags & BD_FLOPPY) { v86.eax = 0xd600 | od->od_unit; @@ -842,17 +849,15 @@ v86.ebx = x * BIOSDISK_SECSIZE; v86.es = VTOPSEG(xp); v86.ebp = VTOPOFF(xp); - v86int(); #else - v86.ctl = V86_FLAGS; v86.addr = 0x13; v86.eax = 0x200 | x; v86.ecx = ((cyl & 0xff) << 8) | ((cyl & 0x300) >> 2) | sec; v86.edx = (hd << 8) | od->od_unit; v86.es = VTOPSEG(xp); v86.ebx = VTOPOFF(xp); - v86int(); #endif + v86int(); result = (v86.efl & 0x1); if (result == 0) break; @@ -900,7 +905,7 @@ od->od_sec = (od->od_unit & 0xf0) == 0x30 ? 18 : 15; } else { - v86.ctl = 0; + v86.ctl = V86_FLAGS; v86.addr = 0x1b; v86.eax = 0x8400 | od->od_unit; v86int(); @@ -908,6 +913,8 @@ od->od_cyl = v86.ecx; od->od_hds = (v86.edx >> 8) & 0xff; od->od_sec = v86.edx & 0xff; + if (v86.efl & 0x1) + return(1); } #else v86.ctl = V86_FLAGS; ---- ここまで ---- ・ディスクの geometry を求める処理にバグがあり、vn デバイス等で正しい geometry が得られないことがあります。次のパッチをあててください。 ---- ここから ---- --- sys/pc98/pc98/diskslice_machdep.c.orig Sat Dec 5 07:54:54 1998 +++ sys/pc98/pc98/diskslice_machdep.c Tue Sep 7 21:55:31 1999 @@ -371,7 +371,7 @@ #ifdef PC98 - ncyls = lp->d_secpercyl; + ncyls = lp->d_ncylinders; #else ncyls = DPCYL(dp->dp_ecyl, dp->dp_esect) + 1; #endif ---- ここまで ---- 以上. -- kogane@jp.freebsd.org