Do not vmap singe pages, just use page_address
This commit is contained in:
parent
66eeec39f5
commit
dbea68ddd2
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue