Message ID | 20210319143452.25948-4-david@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drivers/char: remove /dev/kmem for good | expand |
On Fri 19-03-21 15:34:52, David Hildenbrand wrote: > The last user (/dev/kmem) is gone. Let's drop it. > > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Hillf Danton <hdanton@sina.com> > Cc: Michal Hocko <mhocko@suse.com> > Cc: Matthew Wilcox <willy@infradead.org> > Cc: Oleksiy Avramchenko <oleksiy.avramchenko@sonymobile.com> > Cc: Steven Rostedt <rostedt@goodmis.org> > Cc: Minchan Kim <minchan@kernel.org> > Cc: huang ying <huang.ying.caritas@gmail.com> > Signed-off-by: David Hildenbrand <david@redhat.com> Acked-by: Michal Hocko <mhocko@suse.com> > --- > include/linux/vmalloc.h | 1 - > mm/vmalloc.c | 111 ---------------------------------------- > 2 files changed, 112 deletions(-) > > diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h > index 390af680e916..9c1b17c7dd95 100644 > --- a/include/linux/vmalloc.h > +++ b/include/linux/vmalloc.h > @@ -200,7 +200,6 @@ static inline void set_vm_flush_reset_perms(void *addr) > > /* for /proc/kcore */ > extern long vread(char *buf, char *addr, unsigned long count); > -extern long vwrite(char *buf, char *addr, unsigned long count); > > /* > * Internals. Dont't use.. > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index ccb405b82581..07a39881f9d6 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -2820,43 +2820,6 @@ static int aligned_vread(char *buf, char *addr, unsigned long count) > return copied; > } > > -static int aligned_vwrite(char *buf, char *addr, unsigned long count) > -{ > - struct page *p; > - int copied = 0; > - > - while (count) { > - unsigned long offset, length; > - > - offset = offset_in_page(addr); > - length = PAGE_SIZE - offset; > - if (length > count) > - length = count; > - p = vmalloc_to_page(addr); > - /* > - * To do safe access to this _mapped_ area, we need > - * lock. But adding lock here means that we need to add > - * overhead of vmalloc()/vfree() calles for this _debug_ > - * interface, rarely used. Instead of that, we'll use > - * kmap() and get small overhead in this access function. > - */ > - if (p) { > - /* > - * we can expect USER0 is not used (see vread/vwrite's > - * function description) > - */ > - void *map = kmap_atomic(p); > - memcpy(map + offset, buf, length); > - kunmap_atomic(map); > - } > - addr += length; > - buf += length; > - copied += length; > - count -= length; > - } > - return copied; > -} > - > /** > * vread() - read vmalloc area in a safe way. > * @buf: buffer for reading data > @@ -2936,80 +2899,6 @@ long vread(char *buf, char *addr, unsigned long count) > return buflen; > } > > -/** > - * vwrite() - write vmalloc area in a safe way. > - * @buf: buffer for source data > - * @addr: vm address. > - * @count: number of bytes to be read. > - * > - * This function checks that addr is a valid vmalloc'ed area, and > - * copy data from a buffer to the given addr. If specified range of > - * [addr...addr+count) includes some valid address, data is copied from > - * proper area of @buf. If there are memory holes, no copy to hole. > - * IOREMAP area is treated as memory hole and no copy is done. > - * > - * If [addr...addr+count) doesn't includes any intersects with alive > - * vm_struct area, returns 0. @buf should be kernel's buffer. > - * > - * Note: In usual ops, vwrite() is never necessary because the caller > - * should know vmalloc() area is valid and can use memcpy(). > - * This is for routines which have to access vmalloc area without > - * any information, as /dev/kmem. > - * > - * Return: number of bytes for which addr and buf should be > - * increased (same number as @count) or %0 if [addr...addr+count) > - * doesn't include any intersection with valid vmalloc area > - */ > -long vwrite(char *buf, char *addr, unsigned long count) > -{ > - struct vmap_area *va; > - struct vm_struct *vm; > - char *vaddr; > - unsigned long n, buflen; > - int copied = 0; > - > - /* Don't allow overflow */ > - if ((unsigned long) addr + count < count) > - count = -(unsigned long) addr; > - buflen = count; > - > - spin_lock(&vmap_area_lock); > - list_for_each_entry(va, &vmap_area_list, list) { > - if (!count) > - break; > - > - if (!va->vm) > - continue; > - > - vm = va->vm; > - vaddr = (char *) vm->addr; > - if (addr >= vaddr + get_vm_area_size(vm)) > - continue; > - while (addr < vaddr) { > - if (count == 0) > - goto finished; > - buf++; > - addr++; > - count--; > - } > - n = vaddr + get_vm_area_size(vm) - addr; > - if (n > count) > - n = count; > - if (!(vm->flags & VM_IOREMAP)) { > - aligned_vwrite(buf, addr, n); > - copied++; > - } > - buf += n; > - addr += n; > - count -= n; > - } > -finished: > - spin_unlock(&vmap_area_lock); > - if (!copied) > - return 0; > - return buflen; > -} > - > /** > * remap_vmalloc_range_partial - map vmalloc pages to userspace > * @vma: vma to cover > -- > 2.29.2
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index 390af680e916..9c1b17c7dd95 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h @@ -200,7 +200,6 @@ static inline void set_vm_flush_reset_perms(void *addr) /* for /proc/kcore */ extern long vread(char *buf, char *addr, unsigned long count); -extern long vwrite(char *buf, char *addr, unsigned long count); /* * Internals. Dont't use.. diff --git a/mm/vmalloc.c b/mm/vmalloc.c index ccb405b82581..07a39881f9d6 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -2820,43 +2820,6 @@ static int aligned_vread(char *buf, char *addr, unsigned long count) return copied; } -static int aligned_vwrite(char *buf, char *addr, unsigned long count) -{ - struct page *p; - int copied = 0; - - while (count) { - unsigned long offset, length; - - offset = offset_in_page(addr); - length = PAGE_SIZE - offset; - if (length > count) - length = count; - p = vmalloc_to_page(addr); - /* - * To do safe access to this _mapped_ area, we need - * lock. But adding lock here means that we need to add - * overhead of vmalloc()/vfree() calles for this _debug_ - * interface, rarely used. Instead of that, we'll use - * kmap() and get small overhead in this access function. - */ - if (p) { - /* - * we can expect USER0 is not used (see vread/vwrite's - * function description) - */ - void *map = kmap_atomic(p); - memcpy(map + offset, buf, length); - kunmap_atomic(map); - } - addr += length; - buf += length; - copied += length; - count -= length; - } - return copied; -} - /** * vread() - read vmalloc area in a safe way. * @buf: buffer for reading data @@ -2936,80 +2899,6 @@ long vread(char *buf, char *addr, unsigned long count) return buflen; } -/** - * vwrite() - write vmalloc area in a safe way. - * @buf: buffer for source data - * @addr: vm address. - * @count: number of bytes to be read. - * - * This function checks that addr is a valid vmalloc'ed area, and - * copy data from a buffer to the given addr. If specified range of - * [addr...addr+count) includes some valid address, data is copied from - * proper area of @buf. If there are memory holes, no copy to hole. - * IOREMAP area is treated as memory hole and no copy is done. - * - * If [addr...addr+count) doesn't includes any intersects with alive - * vm_struct area, returns 0. @buf should be kernel's buffer. - * - * Note: In usual ops, vwrite() is never necessary because the caller - * should know vmalloc() area is valid and can use memcpy(). - * This is for routines which have to access vmalloc area without - * any information, as /dev/kmem. - * - * Return: number of bytes for which addr and buf should be - * increased (same number as @count) or %0 if [addr...addr+count) - * doesn't include any intersection with valid vmalloc area - */ -long vwrite(char *buf, char *addr, unsigned long count) -{ - struct vmap_area *va; - struct vm_struct *vm; - char *vaddr; - unsigned long n, buflen; - int copied = 0; - - /* Don't allow overflow */ - if ((unsigned long) addr + count < count) - count = -(unsigned long) addr; - buflen = count; - - spin_lock(&vmap_area_lock); - list_for_each_entry(va, &vmap_area_list, list) { - if (!count) - break; - - if (!va->vm) - continue; - - vm = va->vm; - vaddr = (char *) vm->addr; - if (addr >= vaddr + get_vm_area_size(vm)) - continue; - while (addr < vaddr) { - if (count == 0) - goto finished; - buf++; - addr++; - count--; - } - n = vaddr + get_vm_area_size(vm) - addr; - if (n > count) - n = count; - if (!(vm->flags & VM_IOREMAP)) { - aligned_vwrite(buf, addr, n); - copied++; - } - buf += n; - addr += n; - count -= n; - } -finished: - spin_unlock(&vmap_area_lock); - if (!copied) - return 0; - return buflen; -} - /** * remap_vmalloc_range_partial - map vmalloc pages to userspace * @vma: vma to cover
The last user (/dev/kmem) is gone. Let's drop it. Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Hillf Danton <hdanton@sina.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: Oleksiy Avramchenko <oleksiy.avramchenko@sonymobile.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Minchan Kim <minchan@kernel.org> Cc: huang ying <huang.ying.caritas@gmail.com> Signed-off-by: David Hildenbrand <david@redhat.com> --- include/linux/vmalloc.h | 1 - mm/vmalloc.c | 111 ---------------------------------------- 2 files changed, 112 deletions(-)