All users of xfrm_addr_cmp() use its result as boolean.
Introduce xfrm_addr_equal() (which is equal to !xfrm_addr_cmp())
and convert all users.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
 extern struct xfrm_algo_desc *xfrm_aead_get_byname(const char *name, int icv_len,
                                                   int probe);
 
-static inline int xfrm_addr_cmp(const xfrm_address_t *a,
-                               const xfrm_address_t *b,
-                               int family)
+static inline bool xfrm6_addr_equal(const xfrm_address_t *a,
+                                   const xfrm_address_t *b)
+{
+       return ipv6_addr_equal((const struct in6_addr *)a,
+                              (const struct in6_addr *)b);
+}
+
+static inline bool xfrm_addr_equal(const xfrm_address_t *a,
+                                  const xfrm_address_t *b,
+                                  sa_family_t family)
 {
        switch (family) {
        default:
        case AF_INET:
-               return (__force u32)a->a4 - (__force u32)b->a4;
+               return ((__force u32)a->a4 ^ (__force u32)b->a4) == 0;
        case AF_INET6:
-               return ipv6_addr_cmp((const struct in6_addr *)a,
-                                    (const struct in6_addr *)b);
+               return xfrm6_addr_equal(a, b);
        }
 }
 
-static inline bool xfrm6_addr_equal(const xfrm_address_t *a,
-                                   const xfrm_address_t *b)
-{
-       return ipv6_addr_equal((const struct in6_addr *)a,
-                              (const struct in6_addr *)b);
-}
-
 static inline int xfrm_policy_id2dir(u32 index)
 {
        return index & 7;
 
        }
 
        /* identity & sensitivity */
-       if (xfrm_addr_cmp(&x->sel.saddr, &x->props.saddr, x->props.family))
+       if (!xfrm_addr_equal(&x->sel.saddr, &x->props.saddr, x->props.family))
                size += sizeof(struct sadb_address) + sockaddr_size;
 
        if (add_keys) {
        if (!addr->sadb_address_prefixlen)
                BUG();
 
-       if (xfrm_addr_cmp(&x->sel.saddr, &x->props.saddr,
-                         x->props.family)) {
+       if (!xfrm_addr_equal(&x->sel.saddr, &x->props.saddr,
+                            x->props.family)) {
                addr = (struct sadb_address*) skb_put(skb,
                        sizeof(struct sadb_address)+sockaddr_size);
                addr->sadb_address_len =
 
        if (hdr->sadb_msg_seq) {
                x = xfrm_find_acq_byseq(net, DUMMY_MARK, hdr->sadb_msg_seq);
-               if (x && xfrm_addr_cmp(&x->id.daddr, xdaddr, family)) {
+               if (x && !xfrm_addr_equal(&x->id.daddr, xdaddr, family)) {
                        xfrm_state_put(x);
                        x = NULL;
                }
 
 {
        if (sel_cmp->proto == IPSEC_ULPROTO_ANY) {
                if (sel_tgt->family == sel_cmp->family &&
-                   xfrm_addr_cmp(&sel_tgt->daddr, &sel_cmp->daddr,
-                                 sel_cmp->family) == 0 &&
-                   xfrm_addr_cmp(&sel_tgt->saddr, &sel_cmp->saddr,
-                                 sel_cmp->family) == 0 &&
+                   xfrm_addr_equal(&sel_tgt->daddr, &sel_cmp->daddr,
+                                   sel_cmp->family) &&
+                   xfrm_addr_equal(&sel_tgt->saddr, &sel_cmp->saddr,
+                                   sel_cmp->family) &&
                    sel_tgt->prefixlen_d == sel_cmp->prefixlen_d &&
                    sel_tgt->prefixlen_s == sel_cmp->prefixlen_s) {
                        return true;
                switch (t->mode) {
                case XFRM_MODE_TUNNEL:
                case XFRM_MODE_BEET:
-                       if (xfrm_addr_cmp(&t->id.daddr, &m->old_daddr,
-                                         m->old_family) == 0 &&
-                           xfrm_addr_cmp(&t->saddr, &m->old_saddr,
-                                         m->old_family) == 0) {
+                       if (xfrm_addr_equal(&t->id.daddr, &m->old_daddr,
+                                           m->old_family) &&
+                           xfrm_addr_equal(&t->saddr, &m->old_saddr,
+                                           m->old_family)) {
                                match = 1;
                        }
                        break;
                return -EINVAL;
 
        for (i = 0; i < num_migrate; i++) {
-               if ((xfrm_addr_cmp(&m[i].old_daddr, &m[i].new_daddr,
-                                  m[i].old_family) == 0) &&
-                   (xfrm_addr_cmp(&m[i].old_saddr, &m[i].new_saddr,
-                                  m[i].old_family) == 0))
+               if (xfrm_addr_equal(&m[i].old_daddr, &m[i].new_daddr,
+                                   m[i].old_family) &&
+                   xfrm_addr_equal(&m[i].old_saddr, &m[i].new_saddr,
+                                   m[i].old_family))
                        return -EINVAL;
                if (xfrm_addr_any(&m[i].new_daddr, m[i].new_family) ||
                    xfrm_addr_any(&m[i].new_saddr, m[i].new_family))
 
                if (x->props.family != family ||
                    x->id.spi       != spi ||
                    x->id.proto     != proto ||
-                   xfrm_addr_cmp(&x->id.daddr, daddr, family))
+                   !xfrm_addr_equal(&x->id.daddr, daddr, family))
                        continue;
 
                if ((mark & x->mark.m) != x->mark.v)
        hlist_for_each_entry(x, entry, net->xfrm.state_bysrc+h, bysrc) {
                if (x->props.family != family ||
                    x->id.proto     != proto ||
-                   xfrm_addr_cmp(&x->id.daddr, daddr, family) ||
-                   xfrm_addr_cmp(&x->props.saddr, saddr, family))
+                   !xfrm_addr_equal(&x->id.daddr, daddr, family) ||
+                   !xfrm_addr_equal(&x->props.saddr, saddr, family))
                        continue;
 
                if ((mark & x->mark.m) != x->mark.v)
                if (x->props.family     == family &&
                    x->props.reqid      == reqid &&
                    (mark & x->mark.m) == x->mark.v &&
-                   !xfrm_addr_cmp(&x->id.daddr, &xnew->id.daddr, family) &&
-                   !xfrm_addr_cmp(&x->props.saddr, &xnew->props.saddr, family))
+                   xfrm_addr_equal(&x->id.daddr, &xnew->id.daddr, family) &&
+                   xfrm_addr_equal(&x->props.saddr, &xnew->props.saddr, family))
                        x->genid++;
        }
 }
                    x->id.spi       != 0 ||
                    x->id.proto     != proto ||
                    (mark & x->mark.m) != x->mark.v ||
-                   xfrm_addr_cmp(&x->id.daddr, daddr, family) ||
-                   xfrm_addr_cmp(&x->props.saddr, saddr, family))
+                   !xfrm_addr_equal(&x->id.daddr, daddr, family) ||
+                   !xfrm_addr_equal(&x->props.saddr, saddr, family))
                        continue;
 
                xfrm_state_hold(x);
        if (use_spi && x->km.seq) {
                x1 = __xfrm_find_acq_byseq(net, mark, x->km.seq);
                if (x1 && ((x1->id.proto != x->id.proto) ||
-                   xfrm_addr_cmp(&x1->id.daddr, &x->id.daddr, family))) {
+                   !xfrm_addr_equal(&x1->id.daddr, &x->id.daddr, family))) {
                        to_put = x1;
                        x1 = NULL;
                }
                                continue;
                        if (m->reqid && x->props.reqid != m->reqid)
                                continue;
-                       if (xfrm_addr_cmp(&x->id.daddr, &m->old_daddr,
-                                         m->old_family) ||
-                           xfrm_addr_cmp(&x->props.saddr, &m->old_saddr,
-                                         m->old_family))
+                       if (!xfrm_addr_equal(&x->id.daddr, &m->old_daddr,
+                                            m->old_family) ||
+                           !xfrm_addr_equal(&x->props.saddr, &m->old_saddr,
+                                            m->old_family))
                                continue;
                        xfrm_state_hold(x);
                        return x;
                        if (x->props.mode != m->mode ||
                            x->id.proto != m->proto)
                                continue;
-                       if (xfrm_addr_cmp(&x->id.daddr, &m->old_daddr,
-                                         m->old_family) ||
-                           xfrm_addr_cmp(&x->props.saddr, &m->old_saddr,
-                                         m->old_family))
+                       if (!xfrm_addr_equal(&x->id.daddr, &m->old_daddr,
+                                            m->old_family) ||
+                           !xfrm_addr_equal(&x->props.saddr, &m->old_saddr,
+                                            m->old_family))
                                continue;
                        xfrm_state_hold(x);
                        return x;
        memcpy(&xc->props.saddr, &m->new_saddr, sizeof(xc->props.saddr));
 
        /* add state */
-       if (!xfrm_addr_cmp(&x->id.daddr, &m->new_daddr, m->new_family)) {
+       if (xfrm_addr_equal(&x->id.daddr, &m->new_daddr, m->new_family)) {
                /* a care is needed when the destination address of the
                   state is to be updated as it is a part of triplet */
                xfrm_state_insert(xc);
 
        mark = xfrm_mark_get(attrs, &m);
        if (p->info.seq) {
                x = xfrm_find_acq_byseq(net, mark, p->info.seq);
-               if (x && xfrm_addr_cmp(&x->id.daddr, daddr, family)) {
+               if (x && !xfrm_addr_equal(&x->id.daddr, daddr, family)) {
                        xfrm_state_put(x);
                        x = NULL;
                }