稀疏抛出的警告

时间:2014-03-01 20:27:42

标签: c linux linux-kernel linux-device-driver

当我使用以下选项在Linux驱动程序上运行备用时,我有以下警告被稀疏抛出: make C=2 CF=-D__CHECK_ENDIAN__

我的功能是:

static inline u8 rsi_get_register_addr(u8 *addr, u16 offset)
{
        return (le16_to_cpu(*(u16 *)&addr[offset]) & 0x7000) >> 12;
}

稀疏报告的警告是: warning: cast to restricted __le16

有人可以帮我理解这里出了什么问题吗?

我目前面临的另一个问题是以下几行:

__le16 values[20] = {0xf0, 0xfb, 0xf2, 0xf1};

Sparse给出以下警告:  warning: incorrect type in initializer (different base types) expected restricted __le16 got int

另一个问题是: seq = cpu_to_le16(tmp_hdr->seq >> 4);

我得到的错误是:restricted __le16 degrades to integer

不确定如何解决此问题。

如何纠正所有这些问题?

1 个答案:

答案 0 :(得分:2)

第一期

(le16_to_cpu(*(__le16 *)&addr[offset]) & 0x7000) >> 12;

第二期

__le16 val[20] = {cpu_to_le16(0xf0), cpu_to_le16(0xfb)..}

第3期

u16 seq = (le16_to_cpu(tmp_hdr->seq) >> 4);

有关详细信息,请阅读此link