]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
soc/qman: test: Fix implementation of fd_cmp()
authorClaudiu Manoil <claudiu.manoil@nxp.com>
Wed, 16 Nov 2016 14:40:20 +0000 (16:40 +0200)
committerScott Wood <oss@buserror.net>
Wed, 23 Nov 2016 07:23:43 +0000 (01:23 -0600)
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>
drivers/soc/fsl/qbman/qman_test_api.c

index 6880ff17f45e3b102ec250511a4a05133c527132..dba6a80622ed1db271909bda4c85da07ce0b948d 100644 (file)
@@ -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);
        }