aboutsummaryrefslogtreecommitdiffstats
path: root/mm/hugetlb.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/hugetlb.c')
0 files changed, 0 insertions, 0 deletions
: support hwpoison injection for hugepage' href='/cgit/cgit.cgi/litmus-rt-tegra.git/commit/mm/hwpoison-inject.c?id=43131e141abdb44c487cf79af3ef1fe5164dcef9'>43131e141ab
facb6011f39
31d3d3484f9


43131e141ab
31d3d3484f9





cd42f4a3b2b
31d3d3484f9
43131e141ab


31d3d3484f9


0d57eb8dfcb
31d3d3484f9
cd42f4a3b2b
cae681fc12a

847ce401df3







cae681fc12a
847ce401df3
cae681fc12a








847ce401df3

cae681fc12a


847ce401df3






cae681fc12a
847ce401df3







1bfe5febe34




7c116f2b0db









478c5ffc0b5









4fd466eb46a






cae681fc12a
847ce401df3


cae681fc12a




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
                                                         



                          

                          
                          
                     
 
                                   


                                               

                                
                           

                

                                    
 

                                    



                              
                                 


                                                           
                                         

                         
                                        
                                 


                                                        
                                        





                                                                             
                                                                          
           


                                     


                         
       
                                                                       
                                                           

 







                                                 
                                                                        
                                                                          








                                                       

                              


                                                            






                                                                         
                                                                







                                                                        




                                                                           









                                                                              









                                                                                






                                                                          
                 


                          




                             
/* Inject a hwpoison memory failure on a arbitrary pfn */
#include <linux/module.h>
#include <linux/debugfs.h>
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/swap.h>
#include <linux/pagemap.h>
#include <linux/hugetlb.h>
#include "internal.h"

static struct dentry *hwpoison_dir;

static int hwpoison_inject(void *data, u64 val)
{
	unsigned long pfn = val;
	struct page *p;
	struct page *hpage;
	int err;

	if (!capable(CAP_SYS_ADMIN))
		return -EPERM;

	if (!hwpoison_filter_enable)
		goto inject;
	if (!pfn_valid(pfn))
		return -ENXIO;

	p = pfn_to_page(pfn);
	hpage = compound_head(p);
	/*
	 * This implies unable to support free buddy pages.
	 */
	if (!get_page_unless_zero(hpage))
		return 0;

	if (!PageLRU(p) && !PageHuge(p))
		shake_page(p, 0);
	/*
	 * This implies unable to support non-LRU pages.
	 */
	if (!PageLRU(p) && !PageHuge(p))
		return 0;

	/*