All of lore.kernel.org
 help / color / mirror / Atom feed
From: "H. Peter Anvin" <hpa@zytor.com>
To: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Cc: linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
	James Smart <james.smart@emulex.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	x86@kernel.org, Brian Gerst <brgerst@gmail.com>
Subject: Re: [PATCH] BISECTED x86: avoid qword access in memcpy_*io
Date: Tue, 20 Jul 2010 19:48:16 -0700	[thread overview]
Message-ID: <4C465FF0.1030407@zytor.com> (raw)
In-Reply-To: <4C464BA0.20609@jp.fujitsu.com>

On 07/20/2010 06:21 PM, Hidetoshi Seto wrote:
> With v2.6.35-rc5, my x86-64 server doesn't boot but reports a
> Completer Abort on lpfc card.
> 
> The result of git-bisect is:
>   6175ddf06b6172046a329e3abfd9c901a43efd2e is the first bad commit
>   commit 6175ddf06b6172046a329e3abfd9c901a43efd2e
>   Author: Brian Gerst <brgerst@gmail.com>
>   Date:   Fri Feb 5 09:37:07 2010 -0500
>     x86: Clean up mem*io functions.
> 
> What I found are:
>  - memcpy for 64bit uses movq if count >= 64 (arch/x86/lib/memcpy_64.S)
>  - memcpy_toio and memcpy_fromio have changed to use this memcpy by
>    the above commit.
>  - my debug shows that lpfc calls memcpy_toio with not-qword-aligned
>    addresses and count >= 64, e.g.:
>      memcpy_toio(0xffffc900118de004, 0xffff88047293d614, 124);
>    and it seems that it comes from:
>    [drivers/scsi/lpfc/lpfc_sli.c]
>     4929   /* First copy mbox command data to HBA SLIM, skip past first
>     4930      word */
>     4931   to_slim = phba->MBslimaddr + sizeof (uint32_t);
>     4932   lpfc_memcpy_to_slim(to_slim, &mb->un.varWords[0],
>     4933               MAILBOX_CMD_SIZE - sizeof (uint32_t));
> 
> Still I'm not sure what is wrong in software or hardware, however
> I suppose that qword access to iomem is not always safe, so it will
> be OK to back to use __inline_memcpy which uses movsl.
> 
> I confirmed that my server (w/ lpfc) boots with 35-rc5 + this patch.
> 
> Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>

A driver should not use the memcpy-like instructions if it isn't set up
to act as memory (meaning it can handle arbitrary byte enables.)

The function it should be using is called, fairly counterintuitively,
__iowrite32_copy().  It really should be called memcpy_toio32() or
something similar.

	-hpa

-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


  reply	other threads:[~2010-07-21  2:48 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-21  1:21 [PATCH] BISECTED x86: avoid qword access in memcpy_*io Hidetoshi Seto
2010-07-21  2:48 ` H. Peter Anvin [this message]
2010-07-22  1:23   ` Hidetoshi Seto
2010-07-22  2:33     ` H. Peter Anvin
2010-07-22  3:59     ` H. Peter Anvin

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=4C465FF0.1030407@zytor.com \
    --to=hpa@zytor.com \
    --cc=brgerst@gmail.com \
    --cc=james.smart@emulex.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=seto.hidetoshi@jp.fujitsu.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.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.