|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 09/14] soc: aspeed: convert LPC and P2A control mmap hooks to mmap_prepare
Move from the deprecated mmap hook to the new mmap_prepare hook for both
the LPC control and P2A control drivers.
Both remap a range of their reserved memory region, so use the PFN remap
mmap action to do so, retaining the -EAGAIN error on failure via the action
error override.
Signed-off-by: Lorenzo Stoakes (ARM) <ljs@xxxxxxxxxx>
---
drivers/soc/aspeed/aspeed-lpc-ctrl.c | 20 +++++++++-----------
drivers/soc/aspeed/aspeed-p2a-ctrl.c | 22 ++++++++--------------
2 files changed, 17 insertions(+), 25 deletions(-)
diff --git a/drivers/soc/aspeed/aspeed-lpc-ctrl.c
b/drivers/soc/aspeed/aspeed-lpc-ctrl.c
index 4d8574cac703..9258762354cc 100644
--- a/drivers/soc/aspeed/aspeed-lpc-ctrl.c
+++ b/drivers/soc/aspeed/aspeed-lpc-ctrl.c
@@ -47,22 +47,20 @@ static struct aspeed_lpc_ctrl *file_aspeed_lpc_ctrl(struct
file *file)
miscdev);
}
-static int aspeed_lpc_ctrl_mmap(struct file *file, struct vm_area_struct *vma)
+static int aspeed_lpc_ctrl_mmap_prepare(struct vm_area_desc *desc)
{
- struct aspeed_lpc_ctrl *lpc_ctrl = file_aspeed_lpc_ctrl(file);
- unsigned long vsize = vma->vm_end - vma->vm_start;
- pgprot_t prot = vma->vm_page_prot;
+ struct aspeed_lpc_ctrl *lpc_ctrl = file_aspeed_lpc_ctrl(desc->file);
- if (vma->vm_pgoff + vma_pages(vma) > lpc_ctrl->mem_size >> PAGE_SHIFT)
+ if (desc->pgoff + vma_desc_pages(desc) >
+ lpc_ctrl->mem_size >> PAGE_SHIFT)
return -EINVAL;
/* ast2400/2500 AHB accesses are not cache coherent */
- prot = pgprot_noncached(prot);
+ desc->page_prot = pgprot_noncached(desc->page_prot);
- if (remap_pfn_range(vma, vma->vm_start,
- (lpc_ctrl->mem_base >> PAGE_SHIFT) + vma->vm_pgoff,
- vsize, prot))
- return -EAGAIN;
+ mmap_action_remap_full(desc,
+ (lpc_ctrl->mem_base >> PAGE_SHIFT) + desc->pgoff);
+ desc->action.error_override = -EAGAIN;
return 0;
}
@@ -216,7 +214,7 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file,
unsigned int cmd,
static const struct file_operations aspeed_lpc_ctrl_fops = {
.owner = THIS_MODULE,
- .mmap = aspeed_lpc_ctrl_mmap,
+ .mmap_prepare = aspeed_lpc_ctrl_mmap_prepare,
.unlocked_ioctl = aspeed_lpc_ctrl_ioctl,
};
diff --git a/drivers/soc/aspeed/aspeed-p2a-ctrl.c
b/drivers/soc/aspeed/aspeed-p2a-ctrl.c
index b6b7b80f842a..ad59ff28c013 100644
--- a/drivers/soc/aspeed/aspeed-p2a-ctrl.c
+++ b/drivers/soc/aspeed/aspeed-p2a-ctrl.c
@@ -97,29 +97,23 @@ static void aspeed_p2a_disable_bridge(struct
aspeed_p2a_ctrl *p2a_ctrl)
regmap_update_bits(p2a_ctrl->regmap, SCU180, SCU180_ENP2A, 0);
}
-static int aspeed_p2a_mmap(struct file *file, struct vm_area_struct *vma)
+static int aspeed_p2a_mmap_prepare(struct vm_area_desc *desc)
{
- unsigned long vsize;
- pgprot_t prot;
- struct aspeed_p2a_user *priv = file->private_data;
+ struct aspeed_p2a_user *priv = desc->file->private_data;
struct aspeed_p2a_ctrl *ctrl = priv->parent;
if (ctrl->mem_base == 0 && ctrl->mem_size == 0)
return -EINVAL;
- vsize = vma->vm_end - vma->vm_start;
- prot = vma->vm_page_prot;
-
- if (vma->vm_pgoff + vma_pages(vma) > ctrl->mem_size >> PAGE_SHIFT)
+ if (desc->pgoff + vma_desc_pages(desc) > ctrl->mem_size >> PAGE_SHIFT)
return -EINVAL;
/* ast2400/2500 AHB accesses are not cache coherent */
- prot = pgprot_noncached(prot);
+ desc->page_prot = pgprot_noncached(desc->page_prot);
- if (remap_pfn_range(vma, vma->vm_start,
- (ctrl->mem_base >> PAGE_SHIFT) + vma->vm_pgoff,
- vsize, prot))
- return -EAGAIN;
+ mmap_action_remap_full(desc,
+ (ctrl->mem_base >> PAGE_SHIFT) + desc->pgoff);
+ desc->action.error_override = -EAGAIN;
return 0;
}
@@ -308,7 +302,7 @@ static int aspeed_p2a_release(struct inode *inode, struct
file *file)
static const struct file_operations aspeed_p2a_ctrl_fops = {
.owner = THIS_MODULE,
- .mmap = aspeed_p2a_mmap,
+ .mmap_prepare = aspeed_p2a_mmap_prepare,
.unlocked_ioctl = aspeed_p2a_ioctl,
.open = aspeed_p2a_open,
.release = aspeed_p2a_release,
--
2.56.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |