mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
staging: wfx: fix access to le32 attribute 'len'
Sparse complains about the accesses to the field 'len' from struct hif_msg: drivers/staging/wfx/bh.c:88:32: warning: restricted __le16 degrades to integer drivers/staging/wfx/bh.c:88:32: warning: restricted __le16 degrades to integer drivers/staging/wfx/bh.c:93:32: warning: restricted __le16 degrades to integer drivers/staging/wfx/bh.c:93:32: warning: cast to restricted __le16 drivers/staging/wfx/bh.c:93:32: warning: restricted __le16 degrades to integer drivers/staging/wfx/bh.c:121:25: warning: incorrect type in argument 2 (different base types) drivers/staging/wfx/bh.c:121:25: expected unsigned int len drivers/staging/wfx/bh.c:121:25: got restricted __le16 [usertype] len drivers/staging/wfx/hif_rx.c:27:22: warning: restricted __le16 degrades to integer drivers/staging/wfx/hif_rx.c:347:39: warning: incorrect type in argument 7 (different base types) drivers/staging/wfx/hif_rx.c:347:39: expected unsigned int [usertype] len drivers/staging/wfx/hif_rx.c:347:39: got restricted __le16 const [usertype] len drivers/staging/wfx/hif_rx.c:365:39: warning: incorrect type in argument 7 (different base types) drivers/staging/wfx/hif_rx.c:365:39: expected unsigned int [usertype] len drivers/staging/wfx/hif_rx.c:365:39: got restricted __le16 const [usertype] len drivers/staging/wfx/./traces.h:195:1: warning: incorrect type in assignment (different base types) drivers/staging/wfx/./traces.h:195:1: expected int msg_len drivers/staging/wfx/./traces.h:195:1: got restricted __le16 const [usertype] len drivers/staging/wfx/./traces.h:195:1: warning: incorrect type in assignment (different base types) drivers/staging/wfx/./traces.h:195:1: expected int msg_len drivers/staging/wfx/./traces.h:195:1: got restricted __le16 const [usertype] len drivers/staging/wfx/debug.c:319:20: warning: restricted __le16 degrades to integer drivers/staging/wfx/secure_link.c:85:27: warning: restricted __le16 degrades to integer drivers/staging/wfx/secure_link.c:85:27: warning: restricted __le16 degrades to integer Indeed, the attribute len is little-endian. We have to take to the endianness when we access it. Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Link: https://lore.kernel.org/r/20200512150414.267198-14-Jerome.Pouiller@silabs.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
4246fdbf8c
commit
808fcf2e97
@ -84,13 +84,12 @@ static int rx_helper(struct wfx_dev *wdev, size_t read_len, int *is_cnf)
|
||||
// piggyback is probably correct.
|
||||
return piggyback;
|
||||
}
|
||||
le16_to_cpus(&hif->len);
|
||||
computed_len = round_up(hif->len - sizeof(hif->len), 16)
|
||||
+ sizeof(struct hif_sl_msg)
|
||||
+ sizeof(struct hif_sl_tag);
|
||||
computed_len =
|
||||
round_up(le16_to_cpu(hif->len) - sizeof(hif->len), 16) +
|
||||
sizeof(struct hif_sl_msg) +
|
||||
sizeof(struct hif_sl_tag);
|
||||
} else {
|
||||
le16_to_cpus(&hif->len);
|
||||
computed_len = round_up(hif->len, 2);
|
||||
computed_len = round_up(le16_to_cpu(hif->len), 2);
|
||||
}
|
||||
if (computed_len != read_len) {
|
||||
dev_err(wdev->dev, "inconsistent message length: %zu != %zu\n",
|
||||
@ -118,7 +117,7 @@ static int rx_helper(struct wfx_dev *wdev, size_t read_len, int *is_cnf)
|
||||
wdev->hif.rx_seqnum = (hif->seqnum + 1) % (HIF_COUNTER_MAX + 1);
|
||||
}
|
||||
|
||||
skb_put(skb, hif->len);
|
||||
skb_put(skb, le16_to_cpu(hif->len));
|
||||
// wfx_handle_rx takes care on SKB livetime
|
||||
wfx_handle_rx(wdev, skb);
|
||||
if (!wdev->hif.tx_buffers_used)
|
||||
|
@ -250,7 +250,7 @@ static ssize_t wfx_send_hif_msg_write(struct file *file,
|
||||
request = memdup_user(user_buf, count);
|
||||
if (IS_ERR(request))
|
||||
return PTR_ERR(request);
|
||||
if (request->len != count) {
|
||||
if (le16_to_cpu(request->len) != count) {
|
||||
kfree(request);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ static int hif_generic_confirm(struct wfx_dev *wdev,
|
||||
// All confirm messages start with status
|
||||
int status = le32_to_cpup((__le32 *)buf);
|
||||
int cmd = hif->id;
|
||||
int len = hif->len - 4; // drop header
|
||||
int len = le16_to_cpu(hif->len) - 4; // drop header
|
||||
|
||||
WARN(!mutex_is_locked(&wdev->hif_cmd.lock), "data locking error");
|
||||
|
||||
@ -348,7 +348,7 @@ static int hif_error_indication(struct wfx_dev *wdev,
|
||||
else
|
||||
dev_err(wdev->dev, "asynchronous error: unknown: %08x\n", type);
|
||||
print_hex_dump(KERN_INFO, "hif: ", DUMP_PREFIX_OFFSET,
|
||||
16, 1, hif, hif->len, false);
|
||||
16, 1, hif, le16_to_cpu(hif->len), false);
|
||||
wdev->chip_frozen = true;
|
||||
|
||||
return 0;
|
||||
@ -366,7 +366,7 @@ static int hif_exception_indication(struct wfx_dev *wdev,
|
||||
else
|
||||
dev_err(wdev->dev, "firmware exception\n");
|
||||
print_hex_dump(KERN_INFO, "hif: ", DUMP_PREFIX_OFFSET,
|
||||
16, 1, hif, hif->len, false);
|
||||
16, 1, hif, le16_to_cpu(hif->len), false);
|
||||
wdev->chip_frozen = true;
|
||||
|
||||
return -1;
|
||||
|
@ -174,7 +174,7 @@ DECLARE_EVENT_CLASS(hif_data,
|
||||
int header_len;
|
||||
|
||||
__entry->tx_fill_level = tx_fill_level;
|
||||
__entry->msg_len = hif->len;
|
||||
__entry->msg_len = le16_to_cpu(hif->len);
|
||||
__entry->msg_id = hif->id;
|
||||
__entry->if_id = hif->interface;
|
||||
if (is_recv)
|
||||
|
Loading…
Reference in New Issue
Block a user