|
@@ -141,16 +141,14 @@ static void pnv_ioda_reserve_pe(struct pnv_phb *phb, int pe_no)
|
|
|
|
|
|
static struct pnv_ioda_pe *pnv_ioda_alloc_pe(struct pnv_phb *phb)
|
|
|
{
|
|
|
- unsigned long pe;
|
|
|
+ unsigned long pe = phb->ioda.total_pe_num - 1;
|
|
|
|
|
|
- do {
|
|
|
- pe = find_next_zero_bit(phb->ioda.pe_alloc,
|
|
|
- phb->ioda.total_pe_num, 0);
|
|
|
- if (pe >= phb->ioda.total_pe_num)
|
|
|
- return NULL;
|
|
|
- } while(test_and_set_bit(pe, phb->ioda.pe_alloc));
|
|
|
+ for (pe = phb->ioda.total_pe_num - 1; pe >= 0; pe--) {
|
|
|
+ if (!test_and_set_bit(pe, phb->ioda.pe_alloc))
|
|
|
+ return pnv_ioda_init_pe(phb, pe);
|
|
|
+ }
|
|
|
|
|
|
- return pnv_ioda_init_pe(phb, pe);
|
|
|
+ return NULL;
|
|
|
}
|
|
|
|
|
|
static void pnv_ioda_free_pe(struct pnv_ioda_pe *pe)
|