0

全て。

Linux カーネル ソースを閲覧しているときに、次のスニペットを見つけました。

per_cpu(zcache_dstmem, cpu) = NULL;

per_cpu の定義を調べると、次のようになります。

#define VERIFY_PERCPU_PTR(__p) ({                       \
        __verify_pcpu_ptr((__p));                       \
        (typeof(*(__p)) __kernel __force *)(__p);       \
})

#define per_cpu(var, cpu)       (*((void)(cpu), VERIFY_PERCPU_PTR(&(var))))

プリプロセッサを解析すると、次のようになります。

*((void)(cpu), { __verify_pcpu_ptr(&zcache_dstmem); (typeof(zcache_dstmem) __kernel _-force *)(__p); }) = NULL

私はそれを誤って解析したと強く感じており、このスニペットをどのように理解すればよいかわかりません。何か助けはありますか?

4

1 に答える 1

3

交換を1回逃した。

*((void)(cpu), { __verify_pcpu_ptr(&zcache_dstmem); (typeof(zcache_dstmem) __kernel __force *)(&zcache_dstmem); }) = NULL

これは、コンマ操作内のステートメント式の例です。ブロックの結果は最後の式です。(void)(cpu)その部分で何をしているのかわかりませんが&zcache_dstmem、NULL に設定されているように見えますか? これをさらに解きほぐしてください!

于 2013-03-21T03:18:13.000 に答える