ToDo:
調査の結果、原因は 82573Lの power management回りの不具合らしぃことが判明 (82573(V/L/E) TX Unit Hang messages参照)
後期型では、出荷時のEEPROMの configurationで無効化されているそうで、 EEPROMを修正するツールが出回っているようです
Knoppinxの ethtoolを使って Intel(R) PRO/10/100/1000/10GbE Drivers Wiki に置いてある fixeep-82573-dspd.shで修正して解決しました
freebsd-stableの 6.2-RELEASE em0 watchdog timeouts -- sometimes (w/partial workaround) スレッドの 記事 に付属するDOSベースのツールや MSIの Intel LAN firmwareもたぶん同じ修正をしているのだと思う
SAD掲示板では、writeb論争が繰り返されておりますが、 write文と編集記述子の仕様を求めて Web上を彷徨い歩くはめに...
まずは、一個発見♪ XL Fortran 95のマニュアル には、Qと\$はIBM拡張とある。 明らさまに拡張と書かれている以上、Fortran95の編集記述子には 改行抑止制御は実装されていないことに...
Fortran2003には、この拡張は入っているのかな? Fortran2003完全準拠のコンパイラもまだ無いのに、 Fortran2008(2003のマイナーアップデート)が出てくるという話だが...
あと、編集記述子の要素数より多い要素をWRITE文に記述した場合の動作定義が判らない... Orz
HP Fortranのマニュアル にそれらしき記述を発見、それによると編集記述子の 最後まで使いきったら、一度出力終了して、再度出力を始める際に 基本的には制御は、入れ子レベル 1 の右端のグループの反復数に戻さる らしい。 さらに、入れ子レベル 1 の右端のグループに反復数が存在しなければ、制御はそのグループ自体に戻れ、 入れ子レベル 1 のグループが存在しなければ、制御は書式仕様内の最初の編集記述子に戻されるそうなので、同じ形式("A1")で 長さnのinteger*1配列から 文字列を吐き出させる場合(\$,nA1)と(\$,A1)は 同値ということか。
ふむ、少なくとも HP Fortranでのコードは簡単に書けることが判った。
ただ、これだけだとHP Fortranの実装がそうなっているのか Fortran規格でそう実装すべきを規定されているのか区別が付かない。
ふむ、 HP Fortranの編集記述子の 解説によれば、\$の改行抑制と同様の機能で 停留入出力と呼ばれ る機能が有り、これは Fortran90規格に含まれるようだ。 (やはり、\$は HP Fortranでの拡張と書かれている)
改行制御をまとめると、
ということか
write文に ADVANCE='NO'を指定して停留出力を使うと 最後の改行が抑制されるが、編集記述子の数が不足して使いまわされる際に 出力の停止と再開の間で改行が出力される (g95-0.91/gfortran-4.2.4pre/ifort-8.1で確認)
たぶん、Fortran90的には (#a1)な編集記述子を合成して、 ADVANCE='NO'で出力すれば OK、 IBM拡張を当てにするなら (\$,a1)で十分
ただし、ADVANCE予約語は g77の Fortran90モードでは 実装されていない Orz
write(form,*)lで整数lを文字列化した際に、 右詰め・左詰めの違いが出ることに関して SAD掲示板で下記の試験結果を
--- begin test.f --- integer num character*12 form num = 12 write(form,*) num write(*,*)'form=[',form,']' end --- end test.f --- 0. DEC Fortran on acsad0 % f77 test.f && ./a.out form=[ 12] 1. GNU Fortran (GCC) 4.2.4 20080213 (prerelease) % gfortran42 test.f && ./a.out form=[ 12] 2. GNU Fortran (GCC) 3.4.6 [FreeBSD] % g77-34 test.f && ./a.out form=[ 12 ] 3. Intel(R) Fortran Compiler for 32-bit applications, Version 8.1 Build 20060606Z % ifort test.f && ./a.out form=[ 12] 4. G95 0.91 % g95 test.f && ./a.out form=[ 12 ]
報告したが、整数変数記述子は右揃えなので write文に真面目に編集記述子(I12)を付ければ 全ての環境で右詰めで出力されることに、思い至った。 もし、そうでなければ...その Fortranコンパイラは壊れている。
1400509にてdrm-61-kmodビルドに必要なlinuxkpiがMFCされた ports-CURRENT側はまだ対応されてないので以下のQuick HackでビルドとAlderLake-N(Intel N305)での動作を確認した
index 43f0d5be31aa..5eca31fcb15e 100644 --- a/graphics/drm-61-kmod/Makefile +++ b/graphics/drm-61-kmod/Makefile @@ -26,7 +26,7 @@ GH_TAGNAME= ${DRM_KMOD_GH_TAGNAME} .include <bsd.port.options.mk> -.if ${OPSYS} == FreeBSD && ${OSVERSION} < 1500008 +.if ${OPSYS} == FreeBSD && (${OSVERSION} < 1400509 || 1500000 <= ${OSVERSION} && ${OSVERSION} < 1500008) IGNORE= not supported on older than 15.0, no kernel support .endif .if ${OPSYS} != FreeBSD
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記
_ alexd259 [Very nice site!]