soc/qman: test: Fix implementation of fd_cmp()
This function must only return the truth value of whether two frame descriptors are different or not. It does NOT have to compute some obscure difference between fd fields and return it as an int, making sparse complain about type conversions in the process. Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com> Signed-off-by: Scott Wood <oss@buserror.net>
This commit is contained in:
Родитель
b6e969dbae
Коммит
57e68a5e23
|
@ -90,22 +90,15 @@ static void fd_inc(struct qm_fd *fd)
|
|||
}
|
||||
|
||||
/* The only part of the 'fd' we can't memcmp() is the ppid */
|
||||
static int fd_cmp(const struct qm_fd *a, const struct qm_fd *b)
|
||||
static bool fd_neq(const struct qm_fd *a, const struct qm_fd *b)
|
||||
{
|
||||
int r = (qm_fd_addr_get64(a) == qm_fd_addr_get64(b)) ? 0 : -1;
|
||||
bool neq = qm_fd_addr_get64(a) != qm_fd_addr_get64(b);
|
||||
|
||||
if (!r) {
|
||||
enum qm_fd_format fmt_a, fmt_b;
|
||||
neq |= qm_fd_get_format(a) != qm_fd_get_format(b);
|
||||
neq |= a->cfg != b->cfg;
|
||||
neq |= a->cmd != b->cmd;
|
||||
|
||||
fmt_a = qm_fd_get_format(a);
|
||||
fmt_b = qm_fd_get_format(b);
|
||||
r = fmt_a - fmt_b;
|
||||
}
|
||||
if (!r)
|
||||
r = a->cfg - b->cfg;
|
||||
if (!r)
|
||||
r = a->cmd - b->cmd;
|
||||
return r;
|
||||
return neq;
|
||||
}
|
||||
|
||||
/* test */
|
||||
|
@ -217,12 +210,12 @@ static enum qman_cb_dqrr_result cb_dqrr(struct qman_portal *p,
|
|||
struct qman_fq *fq,
|
||||
const struct qm_dqrr_entry *dq)
|
||||
{
|
||||
if (WARN_ON(fd_cmp(&fd_dq, &dq->fd))) {
|
||||
if (WARN_ON(fd_neq(&fd_dq, &dq->fd))) {
|
||||
pr_err("BADNESS: dequeued frame doesn't match;\n");
|
||||
return qman_cb_dqrr_consume;
|
||||
}
|
||||
fd_inc(&fd_dq);
|
||||
if (!(dq->stat & QM_DQRR_STAT_UNSCHEDULED) && !fd_cmp(&fd_dq, &fd)) {
|
||||
if (!(dq->stat & QM_DQRR_STAT_UNSCHEDULED) && !fd_neq(&fd_dq, &fd)) {
|
||||
sdqcr_complete = 1;
|
||||
wake_up(&waitqueue);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче