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