lpar.c (44ae3ab3358e962039c36ad4ae461ae9fb29596c) | lpar.c (9ee820fa005254dfc816330f6654f14dcb2beee1) |
---|---|
1/* 2 * pSeries_lpar.c 3 * Copyright (C) 2001 Todd Inglett, IBM Corporation 4 * 5 * pSeries LPAR support. 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by --- 315 unchanged lines hidden (view full) --- 324 /* I-cache Invalidate = 0 */ 325 /* I-cache synchronize = 0 */ 326 /* Exact = 0 */ 327 flags = 0; 328 329 /* Make pHyp happy */ 330 if ((rflags & _PAGE_NO_CACHE) & !(rflags & _PAGE_WRITETHRU)) 331 hpte_r &= ~_PAGE_COHERENT; | 1/* 2 * pSeries_lpar.c 3 * Copyright (C) 2001 Todd Inglett, IBM Corporation 4 * 5 * pSeries LPAR support. 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by --- 315 unchanged lines hidden (view full) --- 324 /* I-cache Invalidate = 0 */ 325 /* I-cache synchronize = 0 */ 326 /* Exact = 0 */ 327 flags = 0; 328 329 /* Make pHyp happy */ 330 if ((rflags & _PAGE_NO_CACHE) & !(rflags & _PAGE_WRITETHRU)) 331 hpte_r &= ~_PAGE_COHERENT; |
332 if (firmware_has_feature(FW_FEATURE_XCMO) && !(hpte_r & HPTE_R_N)) 333 flags |= H_COALESCE_CAND; |
|
332 333 lpar_rc = plpar_pte_enter(flags, hpte_group, hpte_v, hpte_r, &slot); 334 if (unlikely(lpar_rc == H_PTEG_FULL)) { 335 if (!(vflags & HPTE_V_BOLTED)) 336 pr_devel(" full\n"); 337 return -1; 338 } 339 --- 426 unchanged lines hidden (view full) --- 766 (*depth)++; 767 trace_hcall_exit(opcode, retval, retbuf); 768 (*depth)--; 769 770out: 771 local_irq_restore(flags); 772} 773#endif | 334 335 lpar_rc = plpar_pte_enter(flags, hpte_group, hpte_v, hpte_r, &slot); 336 if (unlikely(lpar_rc == H_PTEG_FULL)) { 337 if (!(vflags & HPTE_V_BOLTED)) 338 pr_devel(" full\n"); 339 return -1; 340 } 341 --- 426 unchanged lines hidden (view full) --- 768 (*depth)++; 769 trace_hcall_exit(opcode, retval, retbuf); 770 (*depth)--; 771 772out: 773 local_irq_restore(flags); 774} 775#endif |
776 777/** 778 * h_get_mpp 779 * H_GET_MPP hcall returns info in 7 parms 780 */ 781int h_get_mpp(struct hvcall_mpp_data *mpp_data) 782{ 783 int rc; 784 unsigned long retbuf[PLPAR_HCALL9_BUFSIZE]; 785 786 rc = plpar_hcall9(H_GET_MPP, retbuf); 787 788 mpp_data->entitled_mem = retbuf[0]; 789 mpp_data->mapped_mem = retbuf[1]; 790 791 mpp_data->group_num = (retbuf[2] >> 2 * 8) & 0xffff; 792 mpp_data->pool_num = retbuf[2] & 0xffff; 793 794 mpp_data->mem_weight = (retbuf[3] >> 7 * 8) & 0xff; 795 mpp_data->unallocated_mem_weight = (retbuf[3] >> 6 * 8) & 0xff; 796 mpp_data->unallocated_entitlement = retbuf[3] & 0xffffffffffff; 797 798 mpp_data->pool_size = retbuf[4]; 799 mpp_data->loan_request = retbuf[5]; 800 mpp_data->backing_mem = retbuf[6]; 801 802 return rc; 803} 804EXPORT_SYMBOL(h_get_mpp); 805 806int h_get_mpp_x(struct hvcall_mpp_x_data *mpp_x_data) 807{ 808 int rc; 809 unsigned long retbuf[PLPAR_HCALL9_BUFSIZE] = { 0 }; 810 811 rc = plpar_hcall9(H_GET_MPP_X, retbuf); 812 813 mpp_x_data->coalesced_bytes = retbuf[0]; 814 mpp_x_data->pool_coalesced_bytes = retbuf[1]; 815 mpp_x_data->pool_purr_cycles = retbuf[2]; 816 mpp_x_data->pool_spurr_cycles = retbuf[3]; 817 818 return rc; 819} |
|