lkml.org 
[lkml]   [2006]   [Nov]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 19/23] IA64: bte_unaligned_copy() transfers one extra cache line.
    -stable review patch.  If anyone has any objections, please let us know.
    ------------------

    From: Robin Holt <holt@sgi.com>

    When called to do a transfer that has a start offset within the cache
    line which is uneven between source and destination and a length which
    terminates the source of the copy exactly on a cache line, one extra
    line gets copied into a temporary buffer. This is normally not an issue
    since the buffer is a kernel buffer and only the requested information
    gets copied into the user buffer.

    The problem arises when the source ends at the very last physical page
    of memory. That last cache line does not exist and results in the SHUB
    chip raising an MCA.

    Signed-off-by: Robin Holt <holt@sgi.com>
    Signed-off-by: Dean Nelson <dcn@sgi.com>
    Signed-off-by: Tony Luck <tony.luck@intel.com>
    Signed-off-by: Chris Wright <chrisw@sous-sol.org>
    ---
    arch/ia64/sn/kernel/bte.c | 9 ++++-----
    1 file changed, 4 insertions(+), 5 deletions(-)

    --- linux-2.6.18.4.orig/arch/ia64/sn/kernel/bte.c
    +++ linux-2.6.18.4/arch/ia64/sn/kernel/bte.c
    @@ -382,14 +382,13 @@ bte_result_t bte_unaligned_copy(u64 src,
    * bcopy to the destination.
    */

    - /* Add the leader from source */
    - headBteLen = len + (src & L1_CACHE_MASK);
    - /* Add the trailing bytes from footer. */
    - headBteLen += L1_CACHE_BYTES - (headBteLen & L1_CACHE_MASK);
    - headBteSource = src & ~L1_CACHE_MASK;
    headBcopySrcOffset = src & L1_CACHE_MASK;
    headBcopyDest = dest;
    headBcopyLen = len;
    +
    + headBteSource = src - headBcopySrcOffset;
    + /* Add the leading and trailing bytes from source */
    + headBteLen = L1_CACHE_ALIGN(len + headBcopySrcOffset);
    }

    if (headBcopyLen > 0) {
    --
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-11-29 23:09    [W:0.041 / U:30.680 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site