-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use the existing arch_alloc_page/arch_free_page callbacks to do the guest page state transitions between stable and unused. Acked-by: Rik van Riel <riel@redhat.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
- Loading branch information
Martin Schwidefsky
committed
May 7, 2008
1 parent
74c76c8
commit 45e576b
Showing
6 changed files
with
107 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
/* | ||
* arch/s390/mm/page-states.c | ||
* | ||
* Copyright IBM Corp. 2008 | ||
* | ||
* Guest page hinting for unused pages. | ||
* | ||
* Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> | ||
*/ | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/errno.h> | ||
#include <linux/types.h> | ||
#include <linux/mm.h> | ||
#include <linux/init.h> | ||
|
||
#define ESSA_SET_STABLE 1 | ||
#define ESSA_SET_UNUSED 2 | ||
|
||
static int cmma_flag; | ||
|
||
static int __init cmma(char *str) | ||
{ | ||
char *parm; | ||
parm = strstrip(str); | ||
if (strcmp(parm, "yes") == 0 || strcmp(parm, "on") == 0) { | ||
cmma_flag = 1; | ||
return 1; | ||
} | ||
cmma_flag = 0; | ||
if (strcmp(parm, "no") == 0 || strcmp(parm, "off") == 0) | ||
return 1; | ||
return 0; | ||
} | ||
|
||
__setup("cmma=", cmma); | ||
|
||
void __init cmma_init(void) | ||
{ | ||
register unsigned long tmp asm("0") = 0; | ||
register int rc asm("1") = -EOPNOTSUPP; | ||
|
||
if (!cmma_flag) | ||
return; | ||
asm volatile( | ||
" .insn rrf,0xb9ab0000,%1,%1,0,0\n" | ||
"0: la %0,0\n" | ||
"1:\n" | ||
EX_TABLE(0b,1b) | ||
: "+&d" (rc), "+&d" (tmp)); | ||
if (rc) | ||
cmma_flag = 0; | ||
} | ||
|
||
void arch_free_page(struct page *page, int order) | ||
{ | ||
int i, rc; | ||
|
||
if (!cmma_flag) | ||
return; | ||
for (i = 0; i < (1 << order); i++) | ||
asm volatile(".insn rrf,0xb9ab0000,%0,%1,%2,0" | ||
: "=&d" (rc) | ||
: "a" ((page_to_pfn(page) + i) << PAGE_SHIFT), | ||
"i" (ESSA_SET_UNUSED)); | ||
} | ||
|
||
void arch_alloc_page(struct page *page, int order) | ||
{ | ||
int i, rc; | ||
|
||
if (!cmma_flag) | ||
return; | ||
for (i = 0; i < (1 << order); i++) | ||
asm volatile(".insn rrf,0xb9ab0000,%0,%1,%2,0" | ||
: "=&d" (rc) | ||
: "a" ((page_to_pfn(page) + i) << PAGE_SHIFT), | ||
"i" (ESSA_SET_STABLE)); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters