Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/nvdimm/nvdimm_spa.c
Show First 20 Lines • Show All 171 Lines • ▼ Show 20 Lines | nvdimm_spa_uio(struct nvdimm_spa_dev *dev, struct uio *uio) | ||||
struct vm_page m, *ma; | struct vm_page m, *ma; | ||||
off_t off; | off_t off; | ||||
vm_memattr_t mattr; | vm_memattr_t mattr; | ||||
int error, n; | int error, n; | ||||
error = 0; | error = 0; | ||||
if (dev->spa_kva == NULL) { | if (dev->spa_kva == NULL) { | ||||
mattr = nvdimm_spa_memattr(dev); | mattr = nvdimm_spa_memattr(dev); | ||||
bzero(&m, sizeof(m)); | |||||
vm_page_initfake(&m, 0, mattr); | vm_page_initfake(&m, 0, mattr); | ||||
ma = &m; | ma = &m; | ||||
while (uio->uio_resid > 0) { | while (uio->uio_resid > 0) { | ||||
if (uio->uio_offset >= dev->spa_len) | if (uio->uio_offset >= dev->spa_len) | ||||
break; | break; | ||||
off = dev->spa_phys_base + uio->uio_offset; | off = dev->spa_phys_base + uio->uio_offset; | ||||
vm_page_updatefake(&m, trunc_page(off), mattr); | vm_page_updatefake(&m, trunc_page(off), mattr); | ||||
n = PAGE_SIZE; | n = PAGE_SIZE; | ||||
▲ Show 20 Lines • Show All 83 Lines • ▼ Show 20 Lines | |||||
{ | { | ||||
struct vm_page maa[bp->bio_ma_n]; | struct vm_page maa[bp->bio_ma_n]; | ||||
vm_page_t ma[bp->bio_ma_n]; | vm_page_t ma[bp->bio_ma_n]; | ||||
vm_memattr_t mattr; | vm_memattr_t mattr; | ||||
int i; | int i; | ||||
mattr = nvdimm_spa_memattr(dev); | mattr = nvdimm_spa_memattr(dev); | ||||
for (i = 0; i < nitems(ma); i++) { | for (i = 0; i < nitems(ma); i++) { | ||||
maa[i].flags = 0; | bzero(&maa[i], sizeof(maa[i])); | ||||
vm_page_initfake(&maa[i], dev->spa_phys_base + | vm_page_initfake(&maa[i], dev->spa_phys_base + | ||||
trunc_page(bp->bio_offset) + PAGE_SIZE * i, mattr); | trunc_page(bp->bio_offset) + PAGE_SIZE * i, mattr); | ||||
ma[i] = &maa[i]; | ma[i] = &maa[i]; | ||||
} | } | ||||
if (rw == BIO_READ) | if (rw == BIO_READ) | ||||
pmap_copy_pages(ma, bp->bio_offset & PAGE_MASK, bp->bio_ma, | pmap_copy_pages(ma, bp->bio_offset & PAGE_MASK, bp->bio_ma, | ||||
bp->bio_ma_offset, bp->bio_length); | bp->bio_ma_offset, bp->bio_length); | ||||
else | else | ||||
▲ Show 20 Lines • Show All 316 Lines • Show Last 20 Lines |