From: David Ahern <david.ahern-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
To: "linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH v4] IB/core: Fix unaligned accesses
Date: Fri, 08 May 2015 13:34:20 -0600 [thread overview]
Message-ID: <554D0FBC.9090408@oracle.com> (raw)
In-Reply-To: <1430660906-215424-1-git-send-email-david.ahern-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
ping? I have addressed all of the comments; anything else holding up a
commit?
On 5/3/15 7:48 AM, David Ahern wrote:
> Addresses the following kernel logs seen during boot of sparc systems:
>
> Kernel unaligned access at TPC[103bce50] cm_find_listen+0x34/0xf8 [ib_cm]
> Kernel unaligned access at TPC[103bce50] cm_find_listen+0x34/0xf8 [ib_cm]
> Kernel unaligned access at TPC[103bce50] cm_find_listen+0x34/0xf8 [ib_cm]
> Kernel unaligned access at TPC[103bce50] cm_find_listen+0x34/0xf8 [ib_cm]
> Kernel unaligned access at TPC[103bce50] cm_find_listen+0x34/0xf8 [ib_cm]
>
> Signed-off-by: David Ahern <david.ahern-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
> ---
> v4
> - fix uses of IB_CM_COMPARE_SIZE in memcmp noticed by Shachar
>
> v3
> - updated definition of IB_CM_COMPARE_SIZE to account for u32 walking
> per Yann's comment
> - added const to src/mask args to cm_mask_copy and removed extra whitespace
> per Bart's comments
> - changed 2 private_data declarations to u32 as suggested by Jason
>
> v2
> - updated per Jason's comments
>
> drivers/infiniband/core/cm.c | 23 +++++++++++------------
> drivers/infiniband/core/cm_msgs.h | 4 ++--
> include/rdma/ib_cm.h | 7 ++++---
> 3 files changed, 17 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
> index e28a494e2a3a..0c1419105ff0 100644
> --- a/drivers/infiniband/core/cm.c
> +++ b/drivers/infiniband/core/cm.c
> @@ -437,39 +437,38 @@ static struct cm_id_private * cm_acquire_id(__be32 local_id, __be32 remote_id)
> return cm_id_priv;
> }
>
> -static void cm_mask_copy(u8 *dst, u8 *src, u8 *mask)
> +static void cm_mask_copy(u32 *dst, const u32 *src, const u32 *mask)
> {
> int i;
>
> - for (i = 0; i < IB_CM_COMPARE_SIZE / sizeof(unsigned long); i++)
> - ((unsigned long *) dst)[i] = ((unsigned long *) src)[i] &
> - ((unsigned long *) mask)[i];
> + for (i = 0; i < IB_CM_COMPARE_SIZE; i++)
> + dst[i] = src[i] & mask[i];
> }
>
> static int cm_compare_data(struct ib_cm_compare_data *src_data,
> struct ib_cm_compare_data *dst_data)
> {
> - u8 src[IB_CM_COMPARE_SIZE];
> - u8 dst[IB_CM_COMPARE_SIZE];
> + u32 src[IB_CM_COMPARE_SIZE];
> + u32 dst[IB_CM_COMPARE_SIZE];
>
> if (!src_data || !dst_data)
> return 0;
>
> cm_mask_copy(src, src_data->data, dst_data->mask);
> cm_mask_copy(dst, dst_data->data, src_data->mask);
> - return memcmp(src, dst, IB_CM_COMPARE_SIZE);
> + return memcmp(src, dst, sizeof(src));
> }
>
> -static int cm_compare_private_data(u8 *private_data,
> +static int cm_compare_private_data(u32 *private_data,
> struct ib_cm_compare_data *dst_data)
> {
> - u8 src[IB_CM_COMPARE_SIZE];
> + u32 src[IB_CM_COMPARE_SIZE];
>
> if (!dst_data)
> return 0;
>
> cm_mask_copy(src, private_data, dst_data->mask);
> - return memcmp(src, dst_data->data, IB_CM_COMPARE_SIZE);
> + return memcmp(src, dst_data->data, sizeof(src));
> }
>
> /*
> @@ -538,7 +537,7 @@ static struct cm_id_private * cm_insert_listen(struct cm_id_private *cm_id_priv)
>
> static struct cm_id_private * cm_find_listen(struct ib_device *device,
> __be64 service_id,
> - u8 *private_data)
> + u32 *private_data)
> {
> struct rb_node *node = cm.listen_service_table.rb_node;
> struct cm_id_private *cm_id_priv;
> @@ -953,7 +952,7 @@ int ib_cm_listen(struct ib_cm_id *cm_id, __be64 service_id, __be64 service_mask,
> cm_mask_copy(cm_id_priv->compare_data->data,
> compare_data->data, compare_data->mask);
> memcpy(cm_id_priv->compare_data->mask, compare_data->mask,
> - IB_CM_COMPARE_SIZE);
> + sizeof(compare_data->mask));
> }
>
> cm_id->state = IB_CM_LISTEN;
> diff --git a/drivers/infiniband/core/cm_msgs.h b/drivers/infiniband/core/cm_msgs.h
> index be068f47e47e..8b76f0ef965e 100644
> --- a/drivers/infiniband/core/cm_msgs.h
> +++ b/drivers/infiniband/core/cm_msgs.h
> @@ -103,7 +103,7 @@ struct cm_req_msg {
> /* local ACK timeout:5, rsvd:3 */
> u8 alt_offset139;
>
> - u8 private_data[IB_CM_REQ_PRIVATE_DATA_SIZE];
> + u32 private_data[IB_CM_REQ_PRIVATE_DATA_SIZE / sizeof(u32)];
>
> } __attribute__ ((packed));
>
> @@ -801,7 +801,7 @@ struct cm_sidr_req_msg {
> __be16 rsvd;
> __be64 service_id;
>
> - u8 private_data[IB_CM_SIDR_REQ_PRIVATE_DATA_SIZE];
> + u32 private_data[IB_CM_SIDR_REQ_PRIVATE_DATA_SIZE / sizeof(u32)];
> } __attribute__ ((packed));
>
> struct cm_sidr_rep_msg {
> diff --git a/include/rdma/ib_cm.h b/include/rdma/ib_cm.h
> index 0e3ff30647d5..39ed2d2fbd51 100644
> --- a/include/rdma/ib_cm.h
> +++ b/include/rdma/ib_cm.h
> @@ -105,7 +105,8 @@ enum ib_cm_data_size {
> IB_CM_SIDR_REQ_PRIVATE_DATA_SIZE = 216,
> IB_CM_SIDR_REP_PRIVATE_DATA_SIZE = 136,
> IB_CM_SIDR_REP_INFO_LENGTH = 72,
> - IB_CM_COMPARE_SIZE = 64
> + /* compare done u32 at a time */
> + IB_CM_COMPARE_SIZE = (64 / sizeof(u32))
> };
>
> struct ib_cm_id;
> @@ -337,8 +338,8 @@ void ib_destroy_cm_id(struct ib_cm_id *cm_id);
> #define IB_SDP_SERVICE_ID_MASK cpu_to_be64(0xFFFFFFFFFFFF0000ULL)
>
> struct ib_cm_compare_data {
> - u8 data[IB_CM_COMPARE_SIZE];
> - u8 mask[IB_CM_COMPARE_SIZE];
> + u32 data[IB_CM_COMPARE_SIZE];
> + u32 mask[IB_CM_COMPARE_SIZE];
> };
>
> /**
>
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2015-05-08 19:34 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-03 13:48 [PATCH v4] IB/core: Fix unaligned accesses David Ahern
[not found] ` <1430660906-215424-1-git-send-email-david.ahern-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2015-05-08 19:34 ` David Ahern [this message]
[not found] ` <554D0FBC.9090408-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2015-05-09 3:14 ` Doug Ledford
[not found] ` <1431141243.2407.481.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-05-09 4:08 ` David Ahern
[not found] ` <554D8856.5050201-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2015-05-09 4:18 ` Doug Ledford
[not found] ` <1431145138.2407.507.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-05-09 14:01 ` Yann Droneaud
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=554D0FBC.9090408@oracle.com \
--to=david.ahern-qhclzuegtsvqt0dzr+alfa@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.