gpt4 book ai didi

c - 在c中包装一个读取宏

转载 作者:可可西里 更新时间:2023-11-01 11:49:05 25 4
gpt4 key购买 nike

有一个读取宏如下:

#define I915_READ16(reg)        i915_read16(dev_priv, (reg))
#define I915_WRITE16(reg) i915_write16(dev_priv, (reg))

我想测量每个读/写命令所用的时间。我可以很容易地写如下

#define I915_WRITE_NOTRACE(reg, val)    \
do { \
__start_mmio(); \
writel(val, dev_priv->regs + (reg));\
_end_mmio(); \
} while(0)

其中 __start_mmio 和 __end_mmio 是测量时间的函数。但是对于阅读,如果我这样做,这个宏会给我一个编译错误,因为宏的使用如下:

val = I915_READ16(reg)

将被解码为

val = do {                              
__start_mmio();
readl(dev_priv->regs + (reg));
_end_mmio();
} while(0)

肯定是编译错误。

最佳答案

使用这个宏:

#define I915_READ_NOTRACE(reg) \
(start_mmio2() + readl(dev_priv->regs + (reg)) + end_mmio2())

start_mmio2end_mmio2 定义为返回 0 的函数。例如:

static inline int start_mmio2(void)
{
__start_mmio();
return 0;
}

关于c - 在c中包装一个读取宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27161757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com