Skip to content

Commit 1a3fdcc

Browse files
Dotan BarakMukesh Kacker
authored andcommitted
mlx4_ib: set write-combining flag for userspace blueflame pages
Supported on i386 and x86_64 for now. V2: Added support for PPC64, cleaned up warnings for unsupported platforms. Signed-off-by: Michael S. Tsirkin <[email protected]> Signed-off-by: Jack Morgenstein <[email protected]> Signed-off-by: Vladimir Sokolovsky <[email protected]> (Ported from Mellanox OFED 2.4) Signed-off-by: Mukesh Kacker <[email protected]>
1 parent 03d8d9f commit 1a3fdcc

File tree

4 files changed

+117
-1
lines changed

4 files changed

+117
-1
lines changed

drivers/infiniband/hw/mlx4/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
obj-$(CONFIG_MLX4_INFINIBAND) += mlx4_ib.o
22

33
mlx4_ib-y := ah.o cq.o doorbell.o mad.o main.o mr.o qp.o srq.o mcg.o cm.o alias_GUID.o sysfs.o
4+
mlx4_ib-y += wc.o

drivers/infiniband/hw/mlx4/main.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252

5353
#include "mlx4_ib.h"
5454
#include "user.h"
55+
#include "wc.h"
5556

5657
#define DRV_NAME MLX4_IB_DRV_NAME
5758
#define DRV_VERSION "2.2-1"
@@ -705,7 +706,7 @@ static int mlx4_ib_mmap(struct ib_ucontext *context, struct vm_area_struct *vma)
705706
PAGE_SIZE, vma->vm_page_prot))
706707
return -EAGAIN;
707708
} else if (vma->vm_pgoff == 1 && dev->dev->caps.bf_reg_size != 0) {
708-
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
709+
vma->vm_page_prot = pgprot_wc(vma->vm_page_prot);
709710

710711
if (io_remap_pfn_range(vma, vma->vm_start,
711712
to_mucontext(context)->uar.pfn +

drivers/infiniband/hw/mlx4/wc.c

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
* Copyright (c) 2006-2007 Mellanox Technologies. All rights reserved.
3+
*
4+
* This software is available to you under a choice of one of two
5+
* licenses. You may choose to be licensed under the terms of the GNU
6+
* General Public License (GPL) Version 2, available from the file
7+
* COPYING in the main directory of this source tree, or the
8+
* OpenIB.org BSD license below:
9+
*
10+
* Redistribution and use in source and binary forms, with or
11+
* without modification, are permitted provided that the following
12+
* conditions are met:
13+
*
14+
* - Redistributions of source code must retain the above
15+
* copyright notice, this list of conditions and the following
16+
* disclaimer.
17+
*
18+
* - Redistributions in binary form must reproduce the above
19+
* copyright notice, this list of conditions and the following
20+
* disclaimer in the documentation and/or other materials
21+
* provided with the distribution.
22+
*
23+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27+
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28+
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30+
* SOFTWARE.
31+
*/
32+
33+
#include <linux/pci.h>
34+
#include "wc.h"
35+
36+
#if defined(__i386__) || defined(__x86_64__)
37+
38+
pgprot_t pgprot_wc(pgprot_t _prot)
39+
{
40+
return pgprot_writecombine(_prot);
41+
}
42+
43+
int mlx4_wc_enabled(void)
44+
{
45+
return 1;
46+
}
47+
48+
#elif defined(CONFIG_PPC64)
49+
50+
pgprot_t pgprot_wc(pgprot_t _prot)
51+
{
52+
return __pgprot((pgprot_val(_prot) | _PAGE_NO_CACHE) &
53+
~(pgprot_t)_PAGE_GUARDED);
54+
}
55+
56+
int mlx4_wc_enabled(void)
57+
{
58+
return 1;
59+
}
60+
61+
#else /* !(defined(__i386__) || defined(__x86_64__)) */
62+
63+
pgprot_t pgprot_wc(pgprot_t _prot)
64+
{
65+
return pgprot_noncached(_prot);
66+
}
67+
68+
int mlx4_wc_enabled(void)
69+
{
70+
return 0;
71+
}
72+
73+
#endif

drivers/infiniband/hw/mlx4/wc.h

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright (c) 2006-2007 Mellanox Technologies. All rights reserved.
3+
*
4+
* This software is available to you under a choice of one of two
5+
* licenses. You may choose to be licensed under the terms of the GNU
6+
* General Public License (GPL) Version 2, available from the file
7+
* COPYING in the main directory of this source tree, or the
8+
* OpenIB.org BSD license below:
9+
*
10+
* Redistribution and use in source and binary forms, with or
11+
* without modification, are permitted provided that the following
12+
* conditions are met:
13+
*
14+
* - Redistributions of source code must retain the above
15+
* copyright notice, this list of conditions and the following
16+
* disclaimer.
17+
*
18+
* - Redistributions in binary form must reproduce the above
19+
* copyright notice, this list of conditions and the following
20+
* disclaimer in the documentation and/or other materials
21+
* provided with the distribution.
22+
*
23+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27+
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28+
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30+
* SOFTWARE.
31+
*/
32+
33+
#ifndef mlx4_WC_H
34+
#define mlx4_WC_H
35+
36+
#include <asm/pgtable.h>
37+
38+
int mlx4_wc_enabled(void);
39+
pgprot_t pgprot_wc(pgprot_t _prot);
40+
41+
#endif

0 commit comments

Comments
 (0)