Do not vmap singe pages, just use page_address

This commit is contained in:
Tom Marshall 2019-11-09 17:07:38 +01:00
parent 66eeec39f5
commit dbea68ddd2
1 changed files with 11 additions and 4 deletions

View File

@ -65,9 +65,14 @@ pbat_ctr(struct pbat* pbat,
if (!cbd_alloc_pagev(pbat->pagev, nr_pages)) { if (!cbd_alloc_pagev(pbat->pagev, nr_pages)) {
return false; return false;
} }
pbat->buf = vmap(pbat->pagev, nr_pages, VM_MAP, PAGE_KERNEL); if (nr_pages == 1) {
if (!pbat->buf) { pbat->buf = page_address(pbat->pagev[0]);
return false; }
else {
pbat->buf = vmap(pbat->pagev, nr_pages, VM_MAP, PAGE_KERNEL);
if (!pbat->buf) {
return false;
}
} }
return true; return true;
@ -82,7 +87,9 @@ pbat_dtr(struct pbat* pbat)
for (n = 0; n < nr_pages; ++n) { for (n = 0; n < nr_pages; ++n) {
lock_page(pbat->pagev[n]); lock_page(pbat->pagev[n]);
} }
vunmap(pbat->buf); if (nr_pages != 1) {
vunmap(pbat->buf);
}
pbat->buf = NULL; pbat->buf = NULL;
cbd_free_pagev(pbat->pagev, nr_pages); cbd_free_pagev(pbat->pagev, nr_pages);
kfree(pbat->pagev); kfree(pbat->pagev);