Contributors: 22
Author |
Tokens |
Token Proportion |
Commits |
Commit Proportion |
Arjan van de Ven |
141 |
39.83% |
2 |
6.67% |
Andi Kleen |
48 |
13.56% |
3 |
10.00% |
Venkatesh Pallipadi |
33 |
9.32% |
2 |
6.67% |
Laura Abbott |
23 |
6.50% |
2 |
6.67% |
Rick Edgecombe |
22 |
6.21% |
1 |
3.33% |
Tom Lendacky |
17 |
4.80% |
1 |
3.33% |
Mike Rapoport |
11 |
3.11% |
2 |
6.67% |
Logan Gunthorpe |
7 |
1.98% |
1 |
3.33% |
Kirill A. Shutemov |
6 |
1.69% |
1 |
3.33% |
Peter Zijlstra |
6 |
1.69% |
1 |
3.33% |
Victor Kamensky |
6 |
1.69% |
1 |
3.33% |
Shaohua Li |
5 |
1.41% |
1 |
3.33% |
Ingo Molnar |
5 |
1.41% |
2 |
6.67% |
Suresh B. Siddha |
4 |
1.13% |
1 |
3.33% |
Michael Kelley |
4 |
1.13% |
1 |
3.33% |
Benjamin Thiel |
3 |
0.85% |
1 |
3.33% |
Dave Hansen |
3 |
0.85% |
1 |
3.33% |
Linus Torvalds (pre-git) |
3 |
0.85% |
2 |
6.67% |
Toshi Kani |
2 |
0.56% |
1 |
3.33% |
Pauli Nieminen |
2 |
0.56% |
1 |
3.33% |
Catalin Marinas |
2 |
0.56% |
1 |
3.33% |
Greg Kroah-Hartman |
1 |
0.28% |
1 |
3.33% |
Total |
354 |
|
30 |
|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _ASM_X86_SET_MEMORY_H
#define _ASM_X86_SET_MEMORY_H
#include <linux/mm.h>
#include <asm/page.h>
#include <asm-generic/set_memory.h>
#define set_memory_rox set_memory_rox
int set_memory_rox(unsigned long addr, int numpages);
/*
* The set_memory_* API can be used to change various attributes of a virtual
* address range. The attributes include:
* Cacheability : UnCached, WriteCombining, WriteThrough, WriteBack
* Executability : eXecutable, NoteXecutable
* Read/Write : ReadOnly, ReadWrite
* Presence : NotPresent
* Encryption : Encrypted, Decrypted
*
* Within a category, the attributes are mutually exclusive.
*
* The implementation of this API will take care of various aspects that
* are associated with changing such attributes, such as:
* - Flushing TLBs
* - Flushing CPU caches
* - Making sure aliases of the memory behind the mapping don't violate
* coherency rules as defined by the CPU in the system.
*
* What this API does not do:
* - Provide exclusion between various callers - including callers that
* operation on other mappings of the same physical page
* - Restore default attributes when a page is freed
* - Guarantee that mappings other than the requested one are
* in any state, other than that these do not violate rules for
* the CPU you have. Do not depend on any effects on other mappings,
* CPUs other than the one you have may have more relaxed rules.
* The caller is required to take care of these.
*/
int __set_memory_prot(unsigned long addr, int numpages, pgprot_t prot);
int _set_memory_uc(unsigned long addr, int numpages);
int _set_memory_wc(unsigned long addr, int numpages);
int _set_memory_wt(unsigned long addr, int numpages);
int _set_memory_wb(unsigned long addr, int numpages);
int set_memory_uc(unsigned long addr, int numpages);
int set_memory_wc(unsigned long addr, int numpages);
int set_memory_wb(unsigned long addr, int numpages);
int set_memory_np(unsigned long addr, int numpages);
int set_memory_p(unsigned long addr, int numpages);
int set_memory_4k(unsigned long addr, int numpages);
bool set_memory_enc_stop_conversion(void);
int set_memory_encrypted(unsigned long addr, int numpages);
int set_memory_decrypted(unsigned long addr, int numpages);
int set_memory_np_noalias(unsigned long addr, int numpages);
int set_memory_nonglobal(unsigned long addr, int numpages);
int set_memory_global(unsigned long addr, int numpages);
int set_pages_array_uc(struct page **pages, int addrinarray);
int set_pages_array_wc(struct page **pages, int addrinarray);
int set_pages_array_wb(struct page **pages, int addrinarray);
/*
* For legacy compatibility with the old APIs, a few functions
* are provided that work on a "struct page".
* These functions operate ONLY on the 1:1 kernel mapping of the
* memory that the struct page represents, and internally just
* call the set_memory_* function. See the description of the
* set_memory_* function for more details on conventions.
*
* These APIs should be considered *deprecated* and are likely going to
* be removed in the future.
* The reason for this is the implicit operation on the 1:1 mapping only,
* making this not a generally useful API.
*
* Specifically, many users of the old APIs had a virtual address,
* called virt_to_page() or vmalloc_to_page() on that address to
* get a struct page* that the old API required.
* To convert these cases, use set_memory_*() on the original
* virtual address, do not use these functions.
*/
int set_pages_uc(struct page *page, int numpages);
int set_pages_wb(struct page *page, int numpages);
int set_pages_ro(struct page *page, int numpages);
int set_pages_rw(struct page *page, int numpages);
int set_direct_map_invalid_noflush(struct page *page);
int set_direct_map_default_noflush(struct page *page);
int set_direct_map_valid_noflush(struct page *page, unsigned nr, bool valid);
bool kernel_page_present(struct page *page);
extern int kernel_set_to_readonly;
#endif /* _ASM_X86_SET_MEMORY_H */