diff options
Diffstat (limited to 'arch/sparc/kernel/mdesc.c')
| -rw-r--r-- | arch/sparc/kernel/mdesc.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/sparc/kernel/mdesc.c b/arch/sparc/kernel/mdesc.c index 6dc796280589..831c001604e8 100644 --- a/arch/sparc/kernel/mdesc.c +++ b/arch/sparc/kernel/mdesc.c | |||
| @@ -817,6 +817,30 @@ void __cpuinit mdesc_populate_present_mask(cpumask_t *mask) | |||
| 817 | mdesc_iterate_over_cpus(record_one_cpu, NULL, mask); | 817 | mdesc_iterate_over_cpus(record_one_cpu, NULL, mask); |
| 818 | } | 818 | } |
| 819 | 819 | ||
| 820 | static void * __init check_one_pgsz(struct mdesc_handle *hp, u64 mp, int cpuid, void *arg) | ||
| 821 | { | ||
| 822 | const u64 *pgsz_prop = mdesc_get_property(hp, mp, "mmu-page-size-list", NULL); | ||
| 823 | unsigned long *pgsz_mask = arg; | ||
| 824 | u64 val; | ||
| 825 | |||
| 826 | val = (HV_PGSZ_MASK_8K | HV_PGSZ_MASK_64K | | ||
| 827 | HV_PGSZ_MASK_512K | HV_PGSZ_MASK_4MB); | ||
| 828 | if (pgsz_prop) | ||
| 829 | val = *pgsz_prop; | ||
| 830 | |||
| 831 | if (!*pgsz_mask) | ||
| 832 | *pgsz_mask = val; | ||
| 833 | else | ||
| 834 | *pgsz_mask &= val; | ||
| 835 | return NULL; | ||
| 836 | } | ||
| 837 | |||
| 838 | void __init mdesc_get_page_sizes(cpumask_t *mask, unsigned long *pgsz_mask) | ||
| 839 | { | ||
| 840 | *pgsz_mask = 0; | ||
| 841 | mdesc_iterate_over_cpus(check_one_pgsz, pgsz_mask, mask); | ||
| 842 | } | ||
| 843 | |||
| 820 | static void * __cpuinit fill_in_one_cpu(struct mdesc_handle *hp, u64 mp, int cpuid, void *arg) | 844 | static void * __cpuinit fill_in_one_cpu(struct mdesc_handle *hp, u64 mp, int cpuid, void *arg) |
| 821 | { | 845 | { |
| 822 | const u64 *cfreq = mdesc_get_property(hp, mp, "clock-frequency", NULL); | 846 | const u64 *cfreq = mdesc_get_property(hp, mp, "clock-frequency", NULL); |
