マニュアルより

引用を

割り込みゲートとトラップゲートとは、次の点で異なる。割り込みハンドラあるいは例外ハンドラが割り込みゲートを介してコールされた場合は、プロセッサは EFLAGS レジスタ内の割り込み許可フラグ (IF) をクリアし、これ以降の割り込みによってハンドラの実行が妨害されるのを防ぐ。一方、ハンドラがトラップゲートを介してコールされた場合は、IF フラグのステートは変更されない。
IA32 インテル® アーキテクチャ ソフトウェア デベロッパーズ マニュアル 6.4.1 節より引用

プロセッサがやってるコトは以前指摘を受けた local_irq_{save,restore} なナニと同様 (とは言え、アレが save してるのは EFLAGS のみ) に、以下。(これは偶然なのでしょうか)

  • SS、ESP、EFLAGS、CS、EIP の各レジスタを退避
  • EFLAGS の IF をクリア

割り込み処理へ移行
割り込み処理の実行
割り込み処理からの復旧

あと、非常に興味深いのが __do_IRQ()#kernel/irq/handle.c (handle_IRQ_event()#kernel/irq/handle.c も) がアーキテクチャ依存なソースではなくなっている点です。

もう少し類推している事項をひっくり返すナニを探してみます。
とは言え、直前エントリがダウトだったらヘコむなぁ。本当は実機で実際の動作を踏まえて、な前提の元に発信しないと駄目だろうな。