Message ID | 20170216154724.19244.71396.stgit@tlendack-t1.amdoffice.net (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 02/16/17 at 09:47am, Tom Lendacky wrote: > Use memremap() to map the setup data. This simplifies the code and will > make the appropriate decision as to whether a RAM remapping can be done > or if a fallback to ioremap_cache() is needed (which includes checking > PageHighMem). > > Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> > --- > arch/x86/kernel/kdebugfs.c | 30 +++++++++++------------------- > 1 file changed, 11 insertions(+), 19 deletions(-) > > diff --git a/arch/x86/kernel/kdebugfs.c b/arch/x86/kernel/kdebugfs.c > index bdb83e4..c3d354d 100644 > --- a/arch/x86/kernel/kdebugfs.c > +++ b/arch/x86/kernel/kdebugfs.c > @@ -48,17 +48,13 @@ static ssize_t setup_data_read(struct file *file, char __user *user_buf, > > pa = node->paddr + sizeof(struct setup_data) + pos; > pg = pfn_to_page((pa + count - 1) >> PAGE_SHIFT); > - if (PageHighMem(pg)) { > - p = ioremap_cache(pa, count); > - if (!p) > - return -ENXIO; > - } else > - p = __va(pa); > + p = memremap(pa, count, MEMREMAP_WB); > + if (!p) > + return -ENXIO; -ENOMEM looks better for memremap, ditto for other places.. > > remain = copy_to_user(user_buf, p, count); > > - if (PageHighMem(pg)) > - iounmap(p); > + memunmap(p); > > if (remain) > return -EFAULT; > @@ -127,15 +123,12 @@ static int __init create_setup_data_nodes(struct dentry *parent) > } > > pg = pfn_to_page((pa_data+sizeof(*data)-1) >> PAGE_SHIFT); > - if (PageHighMem(pg)) { > - data = ioremap_cache(pa_data, sizeof(*data)); > - if (!data) { > - kfree(node); > - error = -ENXIO; > - goto err_dir; > - } > - } else > - data = __va(pa_data); > + data = memremap(pa_data, sizeof(*data), MEMREMAP_WB); > + if (!data) { > + kfree(node); > + error = -ENXIO; > + goto err_dir; > + } > > node->paddr = pa_data; > node->type = data->type; > @@ -143,8 +136,7 @@ static int __init create_setup_data_nodes(struct dentry *parent) > error = create_setup_data_node(d, no, node); > pa_data = data->next; > > - if (PageHighMem(pg)) > - iounmap(data); > + memunmap(data); > if (error) > goto err_dir; > no++; > Thanks Dave
On 3/8/2017 1:04 AM, Dave Young wrote: > On 02/16/17 at 09:47am, Tom Lendacky wrote: >> Use memremap() to map the setup data. This simplifies the code and will >> make the appropriate decision as to whether a RAM remapping can be done >> or if a fallback to ioremap_cache() is needed (which includes checking >> PageHighMem). >> >> Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> >> --- >> arch/x86/kernel/kdebugfs.c | 30 +++++++++++------------------- >> 1 file changed, 11 insertions(+), 19 deletions(-) >> >> diff --git a/arch/x86/kernel/kdebugfs.c b/arch/x86/kernel/kdebugfs.c >> index bdb83e4..c3d354d 100644 >> --- a/arch/x86/kernel/kdebugfs.c >> +++ b/arch/x86/kernel/kdebugfs.c >> @@ -48,17 +48,13 @@ static ssize_t setup_data_read(struct file *file, char __user *user_buf, >> >> pa = node->paddr + sizeof(struct setup_data) + pos; >> pg = pfn_to_page((pa + count - 1) >> PAGE_SHIFT); >> - if (PageHighMem(pg)) { >> - p = ioremap_cache(pa, count); >> - if (!p) >> - return -ENXIO; >> - } else >> - p = __va(pa); >> + p = memremap(pa, count, MEMREMAP_WB); >> + if (!p) >> + return -ENXIO; > > -ENOMEM looks better for memremap, ditto for other places.. Makes sense, I'll change them. Thanks, Tom > >> >> remain = copy_to_user(user_buf, p, count); >> >> - if (PageHighMem(pg)) >> - iounmap(p); >> + memunmap(p); >> >> if (remain) >> return -EFAULT; >> @@ -127,15 +123,12 @@ static int __init create_setup_data_nodes(struct dentry *parent) >> } >> >> pg = pfn_to_page((pa_data+sizeof(*data)-1) >> PAGE_SHIFT); >> - if (PageHighMem(pg)) { >> - data = ioremap_cache(pa_data, sizeof(*data)); >> - if (!data) { >> - kfree(node); >> - error = -ENXIO; >> - goto err_dir; >> - } >> - } else >> - data = __va(pa_data); >> + data = memremap(pa_data, sizeof(*data), MEMREMAP_WB); >> + if (!data) { >> + kfree(node); >> + error = -ENXIO; >> + goto err_dir; >> + } >> >> node->paddr = pa_data; >> node->type = data->type; >> @@ -143,8 +136,7 @@ static int __init create_setup_data_nodes(struct dentry *parent) >> error = create_setup_data_node(d, no, node); >> pa_data = data->next; >> >> - if (PageHighMem(pg)) >> - iounmap(data); >> + memunmap(data); >> if (error) >> goto err_dir; >> no++; >> > > Thanks > Dave >
diff --git a/arch/x86/kernel/kdebugfs.c b/arch/x86/kernel/kdebugfs.c index bdb83e4..c3d354d 100644 --- a/arch/x86/kernel/kdebugfs.c +++ b/arch/x86/kernel/kdebugfs.c @@ -48,17 +48,13 @@ static ssize_t setup_data_read(struct file *file, char __user *user_buf, pa = node->paddr + sizeof(struct setup_data) + pos; pg = pfn_to_page((pa + count - 1) >> PAGE_SHIFT); - if (PageHighMem(pg)) { - p = ioremap_cache(pa, count); - if (!p) - return -ENXIO; - } else - p = __va(pa); + p = memremap(pa, count, MEMREMAP_WB); + if (!p) + return -ENXIO; remain = copy_to_user(user_buf, p, count); - if (PageHighMem(pg)) - iounmap(p); + memunmap(p); if (remain) return -EFAULT; @@ -127,15 +123,12 @@ static int __init create_setup_data_nodes(struct dentry *parent) } pg = pfn_to_page((pa_data+sizeof(*data)-1) >> PAGE_SHIFT); - if (PageHighMem(pg)) { - data = ioremap_cache(pa_data, sizeof(*data)); - if (!data) { - kfree(node); - error = -ENXIO; - goto err_dir; - } - } else - data = __va(pa_data); + data = memremap(pa_data, sizeof(*data), MEMREMAP_WB); + if (!data) { + kfree(node); + error = -ENXIO; + goto err_dir; + } node->paddr = pa_data; node->type = data->type; @@ -143,8 +136,7 @@ static int __init create_setup_data_nodes(struct dentry *parent) error = create_setup_data_node(d, no, node); pa_data = data->next; - if (PageHighMem(pg)) - iounmap(data); + memunmap(data); if (error) goto err_dir; no++;
Use memremap() to map the setup data. This simplifies the code and will make the appropriate decision as to whether a RAM remapping can be done or if a fallback to ioremap_cache() is needed (which includes checking PageHighMem). Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> --- arch/x86/kernel/kdebugfs.c | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-)