public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC] free_pages stuff
@ 2015-12-21 23:46 Al Viro
  2015-12-21 23:46 ` [POC][PATCH 01/83] switch free_page() from unsigned long to const void * Al Viro
                   ` (83 more replies)
  0 siblings, 84 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: linux-kernel

	FWIW, I'd done a proof-of-concept patch series converting the things
to
	* free_page() and free_pages() taking the address to free as a pointer
	* get_zeroed_page() returning a pointer
	* get_free_page()/get_free_pages() added, both returning a pointer
	* __get_dma_pages() replaced with get_dma_page() (again, returns
a pointer)

Result is in
git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git work.pages

The first 3 commits in there are flagday ones; doing them from scratch took
about 4 hours total.  The rest isn't system-wide (well, after introduction
of get_free_page() there's a bulk replacement of 
	something *p = (something *)__get_free_page(...);
with
	something *p = get_free_page(...);
but all chunks of that are independent - it can be split by subsystem,
etc.) and would go into individual subsystem trees at leisure.

83 commits so far, 568 files changed, 1956 insertions(+), 2202 deletions(-)
Total: 70 casts added, 1408 removed.  All __get_free_page() calls in the
tree converted; a few __get_free_pages() ones remain (6, AFAICS).

This was mostly a proof-of-concept thing - fixes for bogosities caught in
process will, of course, be cherry-picked and sent to relevant trees,
but the main goal was to find out how much boilerplating is there due to
signatures of free_page, __get_free_page and friends (see above - more than
a thousand casts, with usual effect on safety, etc.) and how painful would the
series be (several hours to do the flagday part from scratch, not particularly
hard to do followup cleanups; most of those cleanups will be trivial to rebase)

IMO the results look interesting.  It's obviously too late in this cycle
(and I used the mainline circa last Thursday as the starting point), but
I could redo the flagday ones easily at any point - for example, overnight
after -rc1.  I'm not sure what's the best merge strategy here - I could put
these 3 into a never-rebased branch, include it into for-next and ask the
folks to pull it into their trees before adding followups.  Alternatively,
we could put these 3 into mainline right after -rc1 (or even into it, if you
give me several hours of warning along the lines of "I'm done merging subtrees
into -rc1 now").

In any case, decision whether to do that thing at all belongs to you - it's
a flagday change in several functions used all over the tree and whichever
way we do it, I need an explicit ACK from you on the change in principle.
If you consider that change too disruptive, please say so.  I'm not asking
to ACK the specific patch series, just the possibility of this API change.

Please, take a look at that branch and comment.  I've taken that about as
far as I can without an ACK or NAK from you...

Shortlog:
Al Viro (83):
      switch free_page() from unsigned long to const void *
      switch free_pages() from unsigned long to const void *
      switch get_zeroed_page() to returning void *
      kill unused {get,free}_user_page()
      switch copy_mount_options to storing void * instead of unsigned long
      drivers/net/wireless/libertas/debugfs.c: get rid of pointless casts
      drivers/net/wireless/mwifiex/debugfs.c: get rid of pointless casts
      affs_evict_inode(): get rid of pointless casts
      configfs_follow_link(): get rid of pointless casts
      kernfs_iop_follow_link(): get rid of pointless casts
      sound/oss/vidc: keep dma_buf[] as pointers
      drivers/tty: get rid of pointless casts
      rds: keep pointers in ->m_page_addrs[]
      proc_dev_atm_read(): get rid of pointless casts
      qib get_map_page(): get rid of pointless casts
      user_namespace: get rid of pointless casts
      ftrace: get rid of pointless casts
      sysctl: get rid of pointless casts
      xenstored_local_init(): get rid of pointless casts
      staging/rdma: get rid of pointless casts
      c6x: remove unused macros
      [davinci] ccdc_update_raw_params() frees the wrong thing
      fd_dma_mem_free(): pass address as void * instead of unsigned long
      ppc: keep ->hpt_virt as a pointer
      dma_4u_alloc_coherent(): don't mix virtual and physical addresses
      dma_4v_alloc_coherent(): don't mix virtual and physical addresses
      new helper: get_dma_pages()
      make fd_dma_mem_alloc/nodma_mem_alloc return a pointer
      switch the remaining users of __get_dma_pages() to get_dma_pages()
      sparc: get rid of pointless casts
      efficeon: get rid of pointless casts
      lguest: get rid of pointless casts
      drivers/pci: get rid of pointless casts
      drivers/s390: ger rid of pointless casts
      s390 kvm: get rid of pointless casts
      pcibios: get rid of pointless casts
      ste_dma40: get rid of pointless casts
      usb_mon: get rid of pointless casts
      gnttab_end_foreign_access(): switch the last argument to void *
      nios2: dma_free_coherent(): get rid of pointless casts
      hsi: get rid of pointless casts
      simserial: get rid of pointless casts
      arm64 vdso: get rid of pointless casts
      cris free_init_page(): switch to __free_page()
      arm: switch kvm_arm_hyp_stack_page to void *
      frv consistent_alloc(): switch page to void *
      ia64: uncached_add_chunk(): switch to __free_pages()
      jfs_readdir(): make dirent_buf a pointer
      get rid of casts in alloc_exact stuff
      s390 cmm: get rid of pointless casts
      microblaze consistent_alloc(): get rid of pointless casts
      devm_{get_}free_pages(): switch to pointers
      cavium: (partially) get rid of cargo-culting in allocator
      um: store stacks as pointers
      sh: get rid of pointless casts
      amd_gart_64: get rid of pointless casts
      iwlegacy: get rid of pointless casts
      iwlwifi: get rid of pointless casts
      add pointer-returning variants of __get_free_pages/__get_free_page
      switch obvious cases to get_free_pages()
      switch obvious cases to get_free_page()
      m68k: switch pte_alloc_one_kernel() to get_free_page()
      switch kvmppc_core_vcpu_create_pr() to get_free_page()
      drivers/video/fbdev: switch to get_free_pages()
      um: switch to get_free_page()
      switch xen_get_swiotlb_free_pages() to returning a pointer
      mn10300 dma_alloc_coherent(): switch to get_free_pages()
      switch ps3_dma_map() and ps3_dma_region_ops->map() instances to physical address
      ps3_alloc_coherent(): get rid of pointless casts
      s390_dma_alloc(): page_to_phys() result is always a multiple of PAGE_SIZE
      s390_dma_alloc(): use page_address()
      [powerpc] switch cmm_page_array->pages[] to pointers
      niu.c: get rid of pointless casts
      [s390] switch pcpu_alloc_lowcore() to get_free_page()
      kill __get_free_page()
      [mips, s390, score] turn empty_zero_page into pointer
      sparc: switch to get_free_pages()
      x86: switch to get_free_pages()
      s390: turn suspend_zero_pages into a pointer
      [sun3] try to sort dvma types out
      sba_iommu: get rid of pointless casts
      media/platform/omap: get rid of pointless casts
      nios2: get rid of pointless casts

Diffstat:
 arch/alpha/include/asm/agp.h                       |  4 +-
 arch/alpha/include/asm/pgalloc.h                   | 10 +--
 arch/alpha/kernel/pci-noop.c                       |  4 +-
 arch/alpha/kernel/pci_iommu.c                      |  6 +-
 arch/alpha/kernel/srm_env.c                        |  8 +-
 arch/alpha/mm/init.c                               |  2 +-
 arch/arc/include/asm/page.h                        |  3 -
 arch/arc/include/asm/pgalloc.h                     | 12 +--
 arch/arc/kernel/setup.c                            |  4 +-
 arch/arc/kernel/troubleshoot.c                     |  8 +-
 arch/arm/include/asm/kvm_host.h                    |  4 +-
 arch/arm/include/asm/page-nommu.h                  |  3 -
 arch/arm/include/asm/pgalloc.h                     |  6 +-
 arch/arm/include/asm/tlb.h                         |  6 +-
 arch/arm/include/asm/xen/page.h                    |  2 +-
 arch/arm/kvm/arm.c                                 | 11 +--
 arch/arm/kvm/mmu.c                                 | 16 ++--
 arch/arm/mm/pgd.c                                  |  4 +-
 arch/arm/xen/mm.c                                  |  4 +-
 arch/arm64/include/asm/kvm_host.h                  |  2 +-
 arch/arm64/include/asm/pgalloc.h                   | 12 +--
 arch/arm64/kernel/vdso.c                           | 11 ++-
 arch/arm64/mm/mmu.c                                |  2 +-
 arch/arm64/mm/pgd.c                                |  4 +-
 arch/blackfin/include/asm/mmu_context.h            |  6 +-
 arch/blackfin/kernel/dma-mapping.c                 |  2 +-
 arch/c6x/include/asm/processor.h                   |  4 -
 arch/cris/arch-v32/drivers/pci/dma.c               |  4 +-
 arch/cris/include/asm/pgalloc.h                    |  6 +-
 arch/cris/mm/init.c                                |  7 +-
 arch/frv/include/asm/page.h                        |  3 -
 arch/frv/include/asm/pgalloc.h                     |  2 +-
 arch/frv/mm/dma-alloc.c                            |  7 +-
 arch/frv/mm/pgalloc.c                              |  2 +-
 arch/h8300/kernel/dma.c                            |  4 +-
 arch/hexagon/include/asm/pgalloc.h                 |  8 +-
 arch/ia64/hp/common/sba_iommu.c                    | 12 ++-
 arch/ia64/hp/sim/simserial.c                       |  7 +-
 arch/ia64/include/asm/agp.h                        |  4 +-
 arch/ia64/include/asm/thread_info.h                |  2 +-
 arch/ia64/include/asm/tlb.h                        |  6 +-
 arch/ia64/kernel/mca.c                             |  3 +-
 arch/ia64/kernel/uncached.c                        |  2 +-
 arch/ia64/sn/pci/pci_dma.c                         |  6 +-
 arch/ia64/sn/pci/tioca_provider.c                  |  2 +-
 arch/m32r/include/asm/pgalloc.h                    |  8 +-
 arch/m68k/include/asm/dvma.h                       | 21 ++----
 arch/m68k/include/asm/floppy.h                     |  8 +-
 arch/m68k/include/asm/mcf_pgalloc.h                | 12 +--
 arch/m68k/include/asm/motorola_pgalloc.h           |  4 +-
 arch/m68k/include/asm/page_mm.h                    |  3 -
 arch/m68k/include/asm/page_no.h                    |  3 -
 arch/m68k/include/asm/sun3_pgalloc.h               | 10 +--
 arch/m68k/kernel/dma.c                             |  4 +-
 arch/m68k/mm/memory.c                              |  2 +-
 arch/m68k/sun3/dvma.c                              | 31 ++++----
 arch/m68k/sun3/sun3dvma.c                          | 48 ++++++------
 arch/m68k/sun3x/dvma.c                             | 15 ++--
 arch/metag/include/asm/pgalloc.h                   |  6 +-
 arch/microblaze/include/asm/pgalloc.h              |  6 +-
 arch/microblaze/kernel/dma.c                       |  2 +-
 arch/microblaze/mm/consistent.c                    | 14 ++--
 arch/microblaze/mm/pgtable.c                       |  2 +-
 arch/mips/include/asm/mach-generic/floppy.h        | 10 +--
 arch/mips/include/asm/mach-jazz/floppy.h           | 14 ++--
 arch/mips/include/asm/pgalloc.h                    | 12 +--
 arch/mips/include/asm/pgtable.h                    |  4 +-
 arch/mips/jazz/jazzdma.c                           |  3 +-
 arch/mips/mm/dma-default.c                         |  4 +-
 arch/mips/mm/init.c                                |  7 +-
 arch/mn10300/include/asm/pgalloc.h                 |  2 +-
 arch/mn10300/mm/dma-alloc.c                        | 19 +++--
 arch/mn10300/mm/pgtable.c                          |  2 +-
 arch/nios2/include/asm/pgalloc.h                   |  6 +-
 arch/nios2/mm/dma-mapping.c                        |  6 +-
 arch/nios2/mm/init.c                               |  8 +-
 arch/nios2/mm/pgtable.c                            |  2 +-
 arch/openrisc/include/asm/page.h                   |  3 -
 arch/openrisc/include/asm/pgalloc.h                |  6 +-
 arch/openrisc/mm/ioremap.c                         |  2 +-
 arch/parisc/include/asm/agp.h                      |  4 +-
 arch/parisc/include/asm/floppy.h                   | 19 ++---
 arch/parisc/include/asm/pgalloc.h                  | 14 ++--
 arch/parisc/kernel/pci-dma.c                       |  9 +--
 arch/powerpc/include/asm/agp.h                     |  4 +-
 arch/powerpc/include/asm/kvm_host.h                |  2 +-
 arch/powerpc/include/asm/pgalloc-32.h              |  4 +-
 arch/powerpc/include/asm/pgalloc-64.h              |  6 +-
 arch/powerpc/include/asm/ps3.h                     |  4 +-
 arch/powerpc/kernel/dma.c                          |  2 +-
 arch/powerpc/kernel/fadump.c                       |  2 +-
 arch/powerpc/kernel/iommu.c                        |  6 +-
 arch/powerpc/kvm/book3s_64_mmu_hv.c                | 15 ++--
 arch/powerpc/kvm/book3s_pr.c                       |  8 +-
 arch/powerpc/kvm/booke.c                           |  2 +-
 arch/powerpc/kvm/e500.c                            |  4 +-
 arch/powerpc/kvm/e500mc.c                          |  4 +-
 arch/powerpc/mm/hugetlbpage.c                      |  4 +-
 arch/powerpc/mm/init_64.c                          |  3 +-
 arch/powerpc/mm/pgtable_32.c                       |  6 +-
 arch/powerpc/mm/subpage-prot.c                     |  6 +-
 arch/powerpc/platforms/cell/spufs/coredump.c       |  4 +-
 arch/powerpc/platforms/cell/spufs/inode.c          |  4 +-
 arch/powerpc/platforms/powernv/pci-ioda.c          |  2 +-
 arch/powerpc/platforms/ps3/mm.c                    | 34 +++------
 arch/powerpc/platforms/ps3/system-bus.c            | 14 ++--
 arch/powerpc/platforms/pseries/cmm.c               | 38 +++++-----
 arch/powerpc/platforms/pseries/iommu.c             |  4 +-
 arch/powerpc/platforms/pseries/pseries_energy.c    |  4 +-
 arch/s390/crypto/aes_s390.c                        |  6 +-
 arch/s390/crypto/des_s390.c                        |  4 +-
 arch/s390/crypto/prng.c                            |  4 +-
 arch/s390/hypfs/hypfs_diag.c                       |  4 +-
 arch/s390/hypfs/hypfs_sprp.c                       |  6 +-
 arch/s390/include/asm/idals.h                      |  8 +-
 arch/s390/include/asm/pgtable.h                    |  6 +-
 arch/s390/kernel/entry.h                           |  2 +-
 arch/s390/kernel/ipl.c                             |  8 +-
 arch/s390/kernel/kprobes.c                         |  4 +-
 arch/s390/kernel/perf_cpum_sf.c                    |  6 +-
 arch/s390/kernel/setup.c                           |  2 +-
 arch/s390/kernel/smp.c                             | 25 +++----
 arch/s390/kernel/suspend.c                         |  6 +-
 arch/s390/kernel/sysinfo.c                         |  4 +-
 arch/s390/kernel/time.c                            |  2 +-
 arch/s390/kernel/topology.c                        |  2 +-
 arch/s390/kernel/vdso.c                            | 16 ++--
 arch/s390/kvm/kvm-s390.c                           | 16 ++--
 arch/s390/kvm/priv.c                               |  8 +-
 arch/s390/mm/cmm.c                                 | 17 ++---
 arch/s390/mm/init.c                                |  7 +-
 arch/s390/mm/maccess.c                             |  8 +-
 arch/s390/mm/pgtable.c                             |  9 +--
 arch/s390/mm/vmem.c                                |  2 +-
 arch/s390/oprofile/hwsampler.c                     | 10 +--
 arch/s390/pci/pci_clp.c                            |  4 +-
 arch/s390/pci/pci_dma.c                            | 14 ++--
 arch/score/include/asm/pgalloc.h                   |  8 +-
 arch/score/include/asm/pgtable.h                   |  6 +-
 arch/score/mm/init.c                               |  6 +-
 arch/sh/boards/mach-hp6xx/pm.c                     |  5 +-
 arch/sh/mm/consistent.c                            |  4 +-
 arch/sparc/include/asm/agp.h                       |  4 +-
 arch/sparc/include/asm/dma.h                       |  2 +-
 arch/sparc/include/asm/floppy_32.h                 |  4 +-
 arch/sparc/include/asm/iommu_64.h                  |  2 +-
 arch/sparc/kernel/iommu.c                          | 17 ++---
 arch/sparc/kernel/ioport.c                         | 12 +--
 arch/sparc/kernel/irq_64.c                         |  8 +-
 arch/sparc/kernel/ldc.c                            | 11 ++-
 arch/sparc/kernel/pci_fire.c                       | 18 ++---
 arch/sparc/kernel/pci_sun4v.c                      | 31 ++++----
 arch/sparc/kernel/traps_64.c                       |  3 +-
 arch/sparc/mm/init_64.c                            |  2 +-
 arch/sparc/mm/io-unit.c                            |  9 +--
 arch/sparc/mm/iommu.c                              | 16 ++--
 arch/tile/mm/elf.c                                 |  4 +-
 arch/um/drivers/chan_user.c                        |  6 +-
 arch/um/drivers/chan_user.h                        |  2 +-
 arch/um/drivers/line.c                             |  8 +-
 arch/um/drivers/mconsole_kern.c                    |  2 +-
 arch/um/drivers/net_kern.c                         |  4 +-
 arch/um/drivers/ubd.h                              |  2 +-
 arch/um/drivers/ubd_kern.c                         |  2 +-
 arch/um/drivers/ubd_user.c                         |  4 +-
 arch/um/include/asm/pgalloc.h                      |  4 +-
 arch/um/include/shared/kern_util.h                 |  4 +-
 arch/um/include/shared/os.h                        |  6 +-
 arch/um/include/shared/skas/mm_id.h                |  2 +-
 arch/um/include/shared/skas/skas.h                 |  2 +-
 arch/um/kernel/mem.c                               |  8 +-
 arch/um/kernel/process.c                           |  9 +--
 arch/um/kernel/skas/mmu.c                          | 11 ++-
 arch/um/kernel/skas/process.c                      |  4 +-
 arch/um/os-Linux/aio.c                             |  2 +-
 arch/um/os-Linux/helper.c                          | 14 ++--
 arch/um/os-Linux/sigio.c                           |  2 +-
 arch/um/os-Linux/skas/process.c                    | 19 +++--
 arch/unicore32/include/asm/pgalloc.h               |  4 +-
 arch/unicore32/mm/pgd.c                            |  6 +-
 arch/x86/include/asm/agp.h                         |  4 +-
 arch/x86/include/asm/floppy.h                      | 19 ++---
 arch/x86/include/asm/pgalloc.h                     |  6 +-
 arch/x86/include/asm/xen/page-coherent.h           |  4 +-
 arch/x86/include/asm/xen/page.h                    |  4 +-
 arch/x86/kernel/amd_gart_64.c                      |  6 +-
 arch/x86/kernel/cpu/perf_event_intel_pt.c          |  2 +-
 arch/x86/kernel/ldt.c                              |  2 +-
 arch/x86/kernel/machine_kexec_32.c                 | 10 +--
 arch/x86/kernel/machine_kexec_64.c                 |  6 +-
 arch/x86/kernel/pci-calgary_64.c                   |  8 +-
 arch/x86/kernel/pci-dma.c                          |  2 +-
 arch/x86/kernel/tce_64.c                           |  6 +-
 arch/x86/kvm/lapic.c                               |  2 +-
 arch/x86/kvm/mmu.c                                 | 12 +--
 arch/x86/kvm/vmx.c                                 | 59 +++++++--------
 arch/x86/kvm/x86.c                                 |  4 +-
 arch/x86/mm/init.c                                 |  2 +-
 arch/x86/mm/init_64.c                              |  2 +-
 arch/x86/mm/pageattr.c                             |  6 +-
 arch/x86/mm/pgtable.c                              | 16 ++--
 arch/x86/pci/pcbios.c                              |  8 +-
 arch/x86/platform/efi/efi.c                        |  6 +-
 arch/x86/um/ldt.c                                  | 17 ++---
 arch/x86/xen/mmu.c                                 |  4 +-
 arch/x86/xen/p2m.c                                 |  4 +-
 arch/x86/xen/pmu.c                                 |  4 +-
 arch/xtensa/include/asm/pgalloc.h                  |  8 +-
 arch/xtensa/kernel/pci-dma.c                       |  2 +-
 block/partitions/check.c                           |  6 +-
 crypto/blkcipher.c                                 |  4 +-
 crypto/tcrypt.c                                    | 10 +--
 crypto/testmgr.c                                   |  6 +-
 crypto/xor.c                                       |  4 +-
 drivers/acpi/apei/ghes.c                           |  4 +-
 drivers/acpi/nvs.c                                 |  4 +-
 drivers/atm/eni.c                                  |  2 +-
 drivers/atm/lanai.c                                |  2 +-
 drivers/auxdisplay/cfag12864b.c                    |  4 +-
 drivers/base/devres.c                              | 10 +--
 drivers/block/aoe/aoecmd.c                         |  2 +-
 drivers/block/cciss.c                              |  4 +-
 drivers/block/drbd/drbd_main.c                     |  8 +-
 drivers/block/floppy.c                             | 18 ++---
 drivers/block/ps3vram.c                            |  7 +-
 drivers/block/xen-blkback/blkback.c                |  4 +-
 drivers/block/xen-blkfront.c                       | 19 +++--
 drivers/block/zram/zcomp.c                         |  4 +-
 drivers/char/agp/amd-k7-agp.c                      |  4 +-
 drivers/char/agp/ati-agp.c                         |  4 +-
 drivers/char/agp/efficeon-agp.c                    | 20 ++---
 drivers/char/agp/hp-agp.c                          |  4 +-
 drivers/char/agp/sworks-agp.c                      |  4 +-
 drivers/char/agp/uninorth-agp.c                    |  6 +-
 drivers/char/mbcs.c                                | 20 ++---
 drivers/char/mem.c                                 |  8 +-
 drivers/char/pcmcia/synclink_cs.c                  |  2 +-
 drivers/char/tpm/tpm_ibmvtpm.c                     |  4 +-
 drivers/char/tpm/xen-tpmfront.c                    |  6 +-
 drivers/char/xilinx_hwicap/xilinx_hwicap.c         | 16 ++--
 drivers/char/xillybus/xillybus_core.c              |  2 +-
 drivers/crypto/atmel-aes.c                         | 12 +--
 drivers/crypto/atmel-tdes.c                        | 12 +--
 drivers/crypto/nx/nx-842.c                         | 12 +--
 drivers/crypto/omap-aes.c                          |  8 +-
 drivers/crypto/omap-des.c                          |  8 +-
 drivers/dma/nbpfaxi.c                              |  2 +-
 drivers/dma/sh/rcar-dmac.c                         |  2 +-
 drivers/dma/ste_dma40.c                            | 12 +--
 drivers/extcon/extcon.c                            |  2 +-
 drivers/firewire/ohci.c                            |  6 +-
 drivers/firmware/dell_rbu.c                        | 15 ++--
 drivers/gpu/drm/amd/amdkfd/kfd_events.c            |  4 +-
 drivers/gpu/drm/via/via_dmablit.c                  |  5 +-
 drivers/hsi/clients/cmt_speech.c                   | 10 +--
 drivers/hv/channel.c                               | 10 +--
 drivers/hv/connection.c                            | 13 ++--
 drivers/hv/hv.c                                    |  6 +-
 drivers/ide/ide-proc.c                             |  8 +-
 drivers/infiniband/core/device.c                   |  2 +-
 drivers/infiniband/core/umem.c                     |  8 +-
 drivers/infiniband/core/umem_odp.c                 |  4 +-
 drivers/infiniband/hw/cxgb3/iwch_provider.c        |  4 +-
 drivers/infiniband/hw/cxgb4/device.c               |  5 +-
 drivers/infiniband/hw/cxgb4/mem.c                  |  4 +-
 drivers/infiniband/hw/mlx4/mr.c                    |  4 +-
 drivers/infiniband/hw/mlx5/mr.c                    |  2 +-
 drivers/infiniband/hw/mlx5/odp.c                   |  4 +-
 drivers/infiniband/hw/mthca/mthca_allocator.c      |  4 +-
 drivers/infiniband/hw/mthca/mthca_provider.c       |  4 +-
 drivers/infiniband/hw/qib/qib_dma.c                |  2 +-
 drivers/infiniband/hw/qib/qib_qp.c                 |  6 +-
 drivers/infiniband/hw/usnic/usnic_uiom.c           |  4 +-
 drivers/input/misc/xen-kbdfront.c                  |  8 +-
 drivers/iommu/amd_iommu.c                          | 18 ++---
 drivers/iommu/amd_iommu_init.c                     | 37 ++++------
 drivers/iommu/amd_iommu_v2.c                       |  6 +-
 drivers/iommu/dmar.c                               |  4 +-
 drivers/iommu/exynos-iommu.c                       | 10 +--
 drivers/iommu/fsl_pamu.c                           |  2 +-
 drivers/iommu/intel-iommu.c                        |  2 +-
 drivers/iommu/intel-svm.c                          |  8 +-
 drivers/iommu/intel_irq_remapping.c                |  2 +-
 drivers/iommu/msm_iommu.c                          | 15 ++--
 drivers/iommu/rockchip-iommu.c                     |  4 +-
 drivers/irqchip/irq-gic-v3-its.c                   |  4 +-
 drivers/lguest/lg.h                                |  2 +-
 drivers/lguest/lguest_user.c                       |  2 +-
 drivers/lguest/page_tables.c                       | 12 +--
 drivers/macintosh/rack-meter.c                     |  6 +-
 drivers/md/bcache/bset.c                           | 18 ++---
 drivers/md/bcache/btree.c                          |  5 +-
 drivers/md/bcache/journal.c                        |  8 +-
 drivers/md/bcache/super.c                          |  6 +-
 drivers/md/dm-bufio.c                              |  5 +-
 drivers/media/pci/pt1/pt1.c                        |  6 +-
 drivers/media/pci/saa7134/saa7134-go7007.c         |  8 +-
 drivers/media/pci/solo6x10/solo6x10-p2m.c          | 10 +--
 drivers/media/pci/ttpci/av7110_ca.c                |  4 +-
 drivers/media/pci/zoran/zoran_driver.c             |  4 +-
 drivers/media/platform/davinci/dm644x_ccdc.c       |  7 +-
 drivers/media/platform/omap/omap_vout.c            | 26 ++++---
 drivers/media/platform/omap/omap_vout_vrfb.c       |  6 +-
 drivers/media/platform/omap/omap_voutdef.h         |  4 +-
 drivers/media/platform/omap/omap_voutlib.c         | 15 ++--
 drivers/media/platform/omap/omap_voutlib.h         |  4 +-
 drivers/misc/cxl/context.c                         |  2 +-
 drivers/misc/cxl/native.c                          |  6 +-
 drivers/misc/cxl/pci.c                             |  4 +-
 drivers/misc/ibmasm/ibmasmfs.c                     |  4 +-
 drivers/misc/lkdtm.c                               | 16 ++--
 drivers/misc/mic/card/mic_virtio.c                 |  4 +-
 drivers/misc/mic/host/mic_virtio.c                 | 16 ++--
 drivers/misc/mic/scif/scif_rma.h                   |  4 +-
 drivers/misc/sgi-gru/grufile.c                     |  4 +-
 drivers/misc/sgi-xp/xpc_uv.c                       |  4 +-
 drivers/mmc/host/tmio_mmc_dma.c                    |  4 +-
 drivers/net/appletalk/ltpc.c                       | 12 ++-
 drivers/net/ethernet/amd/mvme147.c                 |  4 +-
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c    |  2 +-
 drivers/net/ethernet/cavium/liquidio/octeon_droq.c |  4 +-
 drivers/net/ethernet/cavium/liquidio/octeon_droq.h |  3 -
 drivers/net/ethernet/cavium/liquidio/octeon_main.h | 21 +-----
 drivers/net/ethernet/cirrus/cs89x0.c               |  5 +-
 drivers/net/ethernet/i825xx/82596.c                |  4 +-
 drivers/net/ethernet/i825xx/sun3_82586.c           | 13 ++--
 drivers/net/ethernet/ibm/ehea/ehea_main.c          | 26 +++----
 drivers/net/ethernet/ibm/ehea/ehea_qmr.c           |  8 +-
 drivers/net/ethernet/ibm/ibmveth.c                 |  4 +-
 drivers/net/ethernet/seeq/sgiseeq.c                |  2 +-
 drivers/net/ethernet/sfc/mcdi.c                    |  6 +-
 drivers/net/ethernet/sgi/ioc3-eth.c                |  6 +-
 drivers/net/ethernet/sun/niu.c                     |  8 +-
 drivers/net/ethernet/tile/tilegx.c                 |  6 +-
 drivers/net/ethernet/toshiba/ps3_gelic_wireless.c  | 24 +++---
 drivers/net/irda/au1k_ir.c                         |  4 +-
 drivers/net/rionet.c                               |  4 +-
 drivers/net/usb/kaweth.c                           |  4 +-
 drivers/net/wan/z85230.c                           |  8 +-
 drivers/net/wireless/b43/debugfs.c                 |  8 +-
 drivers/net/wireless/b43legacy/debugfs.c           |  8 +-
 drivers/net/wireless/iwlegacy/3945-mac.c           |  2 +-
 drivers/net/wireless/iwlegacy/3945.c               |  2 +-
 drivers/net/wireless/iwlegacy/common.c             | 10 +--
 drivers/net/wireless/iwlegacy/common.h             |  6 +-
 drivers/net/wireless/iwlwifi/iwl-trans.h           |  2 +-
 drivers/net/wireless/iwlwifi/pcie/tx.c             |  2 +-
 drivers/net/wireless/libertas/debugfs.c            | 85 +++++++++-------------
 drivers/net/wireless/mwifiex/debugfs.c             | 78 ++++++++------------
 drivers/net/wireless/ti/wlcore/main.c              | 10 +--
 drivers/net/xen-netfront.c                         | 10 +--
 drivers/parisc/ccio-dma.c                          | 10 +--
 drivers/parisc/ccio-rm-dma.c                       |  4 +-
 drivers/parisc/sba_iommu.c                         | 27 ++++---
 drivers/pci/host/pci-tegra.c                       |  8 +-
 drivers/pci/host/pcie-designware.c                 |  6 +-
 drivers/pci/host/pcie-designware.h                 |  2 +-
 drivers/pci/host/pcie-rcar.c                       |  6 +-
 drivers/pci/host/pcie-xilinx.c                     |  8 +-
 drivers/pci/xen-pcifront.c                         |  7 +-
 drivers/platform/x86/dell-laptop.c                 |  6 +-
 drivers/power/power_supply_sysfs.c                 |  2 +-
 drivers/s390/block/dasd.c                          |  8 +-
 drivers/s390/block/dasd_diag.c                     |  2 +-
 drivers/s390/block/dasd_eckd.c                     | 10 +--
 drivers/s390/block/dasd_eer.c                      |  2 +-
 drivers/s390/block/dasd_fba.c                      |  2 +-
 drivers/s390/block/scm_blk.c                       |  2 +-
 drivers/s390/block/scm_blk_cluster.c               |  2 +-
 drivers/s390/block/xpram.c                         | 22 +++---
 drivers/s390/char/diag_ftp.c                       |  2 +-
 drivers/s390/char/hmcdrv_cache.c                   |  4 +-
 drivers/s390/char/hmcdrv_ftp.c                     |  6 +-
 drivers/s390/char/sclp_async.c                     |  4 +-
 drivers/s390/char/sclp_cmd.c                       | 16 ++--
 drivers/s390/char/sclp_cpi_sys.c                   |  2 +-
 drivers/s390/char/sclp_ctl.c                       |  2 +-
 drivers/s390/char/sclp_ftp.c                       |  8 +-
 drivers/s390/char/sclp_vt220.c                     |  2 +-
 drivers/s390/char/tty3270.c                        |  8 +-
 drivers/s390/char/vmcp.c                           |  7 +-
 drivers/s390/char/vmlogrdr.c                       |  2 +-
 drivers/s390/char/vmur.c                           |  8 +-
 drivers/s390/char/zcore.c                          |  6 +-
 drivers/s390/cio/chsc.c                            | 16 ++--
 drivers/s390/cio/chsc_sch.c                        | 24 +++---
 drivers/s390/cio/cmf.c                             |  6 +-
 drivers/s390/cio/qdio.h                            |  2 +-
 drivers/s390/cio/qdio_main.c                       |  2 +-
 drivers/s390/cio/qdio_setup.c                      | 18 ++---
 drivers/s390/cio/qdio_thinint.c                    |  2 +-
 drivers/s390/cio/scm.c                             |  4 +-
 drivers/s390/crypto/zcrypt_api.c                   |  4 +-
 drivers/s390/crypto/zcrypt_msgtype6.c              |  4 +-
 drivers/s390/crypto/zcrypt_pcixcc.c                |  4 +-
 drivers/s390/net/qeth_core_main.c                  | 11 ++-
 drivers/s390/scsi/zfcp_aux.c                       |  2 +-
 drivers/scsi/cxlflash/main.c                       |  8 +-
 drivers/scsi/cxlflash/superpipe.c                  |  2 +-
 drivers/scsi/ibmvscsi/ibmvfc.c                     |  8 +-
 drivers/scsi/ibmvscsi/ibmvscsi.c                   |  4 +-
 drivers/scsi/ipr.c                                 |  4 +-
 drivers/scsi/libiscsi.c                            |  5 +-
 drivers/scsi/lpfc/lpfc_init.c                      | 10 +--
 drivers/scsi/megaraid/megaraid_sas_base.c          |  6 +-
 drivers/scsi/megaraid/megaraid_sas_fusion.c        |  8 +-
 drivers/scsi/mpt3sas/mpt3sas_base.c                |  9 +--
 drivers/scsi/ncr53c8xx.c                           |  2 +-
 drivers/scsi/scsi_devinfo.c                        |  4 +-
 drivers/scsi/scsi_proc.c                           |  8 +-
 drivers/scsi/sun3_scsi.c                           | 23 +++---
 drivers/scsi/sym53c8xx_2/sym_hipd.h                |  4 +-
 drivers/scsi/vmw_pvscsi.c                          |  8 +-
 drivers/scsi/xen-scsifront.c                       | 12 ++-
 drivers/sh/maple/maple.c                           |  5 +-
 drivers/spi/spi-ep93xx.c                           |  4 +-
 drivers/spi/spi-sh-msiof.c                         | 12 +--
 drivers/staging/comedi/comedi_buf.c                |  2 +-
 drivers/staging/lustre/lustre/llite/llite_lib.c    |  4 +-
 drivers/staging/rdma/ehca/ehca_iverbs.h            |  2 +-
 drivers/staging/rdma/ehca/ehca_mrmw.c              |  4 +-
 drivers/staging/rdma/ehca/ipz_pt_fn.c              |  6 +-
 drivers/staging/rdma/ehca/ipz_pt_fn.h              |  2 +-
 drivers/staging/rdma/hfi1/dma.c                    |  2 +-
 drivers/staging/rdma/hfi1/qp.c                     |  6 +-
 drivers/staging/rdma/ipath/ipath_dma.c             |  2 +-
 drivers/staging/rdma/ipath/ipath_qp.c              |  6 +-
 drivers/staging/unisys/visorbus/visorchannel.c     |  4 +-
 drivers/target/target_core_file.c                  |  4 +-
 drivers/tty/amiserial.c                            |  6 +-
 drivers/tty/cyclades.c                             |  8 +-
 drivers/tty/hvc/hvc_iucv.c                         |  4 +-
 drivers/tty/hvc/hvc_xen.c                          |  4 +-
 drivers/tty/hvc/hvcs.c                             |  6 +-
 drivers/tty/mxser.c                                |  8 +-
 drivers/tty/rocket.c                               |  8 +-
 drivers/tty/serial/68328serial.c                   |  4 +-
 drivers/tty/serial/crisv10.c                       |  6 +-
 drivers/tty/serial/men_z135_uart.c                 |  6 +-
 drivers/tty/serial/pch_uart.c                      |  6 +-
 drivers/tty/serial/serial_core.c                   |  6 +-
 drivers/tty/synclink.c                             |  2 +-
 drivers/tty/tty_port.c                             |  6 +-
 drivers/tty/vt/vc_screen.c                         |  8 +-
 drivers/usb/atm/cxacru.c                           | 16 ++--
 drivers/usb/atm/speedtch.c                         |  4 +-
 drivers/usb/core/devices.c                         |  6 +-
 drivers/usb/core/devio.c                           |  4 +-
 drivers/usb/host/ohci-dbg.c                        |  2 +-
 drivers/usb/misc/rio500.c                          | 14 ++--
 drivers/usb/mon/mon_bin.c                          | 13 ++--
 drivers/usb/serial/usb_wwan.c                      |  6 +-
 drivers/uwb/hwa-rc.c                               |  6 +-
 drivers/video/fbdev/fb-puv3.c                      |  2 +-
 drivers/video/fbdev/grvga.c                        | 20 +++--
 drivers/video/fbdev/ssd1307fb.c                    |  2 +-
 drivers/video/fbdev/vermilion/vermilion.c          | 15 ++--
 drivers/video/fbdev/vermilion/vermilion.h          |  2 +-
 drivers/video/fbdev/xen-fbfront.c                  |  4 +-
 drivers/xen/events/events_base.c                   |  4 +-
 drivers/xen/events/events_fifo.c                   | 10 +--
 drivers/xen/evtchn.c                               |  4 +-
 drivers/xen/grant-table.c                          | 12 +--
 drivers/xen/swiotlb-xen.c                          |  6 +-
 drivers/xen/xen-scsiback.c                         |  6 +-
 drivers/xen/xenbus/xenbus_probe.c                  |  7 +-
 fs/affs/inode.c                                    |  4 +-
 fs/afs/mntpt.c                                     |  8 +-
 fs/bfs/inode.c                                     |  2 +-
 fs/binfmt_misc.c                                   |  4 +-
 fs/ceph/mds_client.c                               |  5 +-
 fs/compat.c                                        |  9 +--
 fs/configfs/file.c                                 |  4 +-
 fs/configfs/symlink.c                              |  6 +-
 fs/ecryptfs/crypto.c                               |  2 +-
 fs/ext4/super.c                                    |  2 +-
 fs/fuse/dir.c                                      |  4 +-
 fs/fuse/file.c                                     |  4 +-
 fs/hfs/mdb.c                                       |  4 +-
 fs/internal.h                                      |  2 +-
 fs/isofs/dir.c                                     |  4 +-
 fs/jbd2/journal.c                                  |  8 +-
 fs/jfs/jfs_dtree.c                                 |  8 +-
 fs/jfs/jfs_logmgr.c                                |  2 +-
 fs/kernfs/symlink.c                                |  8 +-
 fs/libfs.c                                         |  6 +-
 fs/namespace.c                                     | 17 ++---
 fs/nfs/namespace.c                                 |  4 +-
 fs/nfs/nfs4namespace.c                             | 16 ++--
 fs/nfs/super.c                                     |  4 +-
 fs/nfsd/vfs.c                                      |  4 +-
 fs/nilfs2/ioctl.c                                  |  4 +-
 fs/ocfs2/dlm/dlmdebug.c                            |  4 +-
 fs/ocfs2/dlm/dlmdomain.c                           |  4 +-
 fs/ocfs2/dlm/dlmmaster.c                           |  4 +-
 fs/ocfs2/dlm/dlmrecovery.c                         |  4 +-
 fs/overlayfs/copy_up.c                             |  6 +-
 fs/proc/base.c                                     | 20 ++---
 fs/proc/vmcore.c                                   |  6 +-
 fs/quota/dquot.c                                   |  2 +-
 fs/select.c                                        |  4 +-
 include/asm-generic/page.h                         |  3 -
 include/linux/device.h                             |  4 +-
 include/linux/gfp.h                                | 16 ++--
 include/linux/quicklist.h                          |  2 +-
 include/linux/security.h                           |  2 +-
 include/xen/grant_table.h                          |  3 +-
 kernel/events/ring_buffer.c                        |  4 +-
 kernel/groups.c                                    |  6 +-
 kernel/power/swap.c                                | 23 +++---
 kernel/sysctl.c                                    | 31 +++-----
 kernel/trace/ftrace.c                              |  8 +-
 kernel/trace/ring_buffer.c                         |  4 +-
 kernel/trace/trace_events.c                        | 26 +++----
 kernel/trace/trace_events_filter.c                 |  4 +-
 kernel/trace/trace_events_trigger.c                |  8 +-
 kernel/trace/trace_uprobe.c                        |  5 +-
 kernel/user_namespace.c                            | 11 +--
 lib/percpu_ida.c                                   |  4 +-
 lib/raid6/algos.c                                  |  4 +-
 lib/scatterlist.c                                  |  4 +-
 lib/swiotlb.c                                      | 33 ++++-----
 mm/memory.c                                        | 12 +--
 mm/migrate.c                                       |  4 +-
 mm/mincore.c                                       |  4 +-
 mm/page_alloc.c                                    | 45 ++++++------
 mm/quicklist.c                                     |  2 +-
 mm/slob.c                                          |  2 +-
 mm/slub.c                                          |  7 +-
 mm/sparse.c                                        |  2 +-
 net/atm/mpoa_proc.c                                |  6 +-
 net/atm/proc.c                                     |  6 +-
 net/core/dev.c                                     |  2 +-
 net/core/neighbour.c                               |  5 +-
 net/dccp/proto.c                                   | 16 ++--
 net/decnet/dn_route.c                              |  3 +-
 net/ipv4/fib_semantics.c                           |  5 +-
 net/netfilter/nf_conntrack_core.c                  |  5 +-
 net/netfilter/nf_tables_api.c                      |  2 +-
 net/netlink/af_netlink.c                           |  6 +-
 net/packet/af_packet.c                             |  7 +-
 net/rds/cong.c                                     | 10 +--
 net/rds/ib_recv.c                                  |  2 +-
 net/rds/iw_recv.c                                  |  2 +-
 net/rds/message.c                                  |  2 +-
 net/rds/rds.h                                      |  4 +-
 net/rds/tcp_recv.c                                 |  2 +-
 net/sched/sch_api.c                                |  5 +-
 net/sctp/protocol.c                                | 16 ++--
 net/sctp/ssnmap.c                                  |  7 +-
 net/sunrpc/backchannel_rqst.c                      |  4 +-
 net/sunrpc/xprtsock.c                              |  2 +-
 net/xfrm/xfrm_hash.c                               |  5 +-
 security/integrity/ima/ima_crypto.c                |  6 +-
 security/selinux/hooks.c                           |  6 +-
 security/selinux/selinuxfs.c                       | 22 +++---
 security/smack/smack_lsm.c                         |  2 +-
 sound/core/memalloc.c                              |  4 +-
 sound/drivers/dummy.c                              |  2 +-
 sound/oss/dmabuf.c                                 |  4 +-
 sound/oss/msnd_pinnacle.c                          | 20 ++---
 sound/oss/vidc.c                                   |  2 +-
 sound/oss/vidc.h                                   |  3 +-
 sound/pci/emu10k1/memory.c                         |  2 +-
 sound/usb/usx2y/usb_stream.c                       |  9 +--
 tools/virtio/linux/kernel.h                        |  4 +-
 virt/kvm/coalesced_mmio.c                          |  2 +-
 virt/kvm/kvm_main.c                                |  4 +-
 568 files changed, 1956 insertions(+), 2202 deletions(-)

^ permalink raw reply	[flat|nested] 94+ messages in thread

* [POC][PATCH 01/83] switch free_page() from unsigned long to const void *
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 02/83] switch free_pages() " Al Viro
                   ` (82 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/alpha/include/asm/pgalloc.h                  |  6 ++--
 arch/alpha/kernel/srm_env.c                       |  4 +--
 arch/arc/include/asm/page.h                       |  2 +-
 arch/arc/kernel/setup.c                           |  2 +-
 arch/arc/kernel/troubleshoot.c                    |  4 +--
 arch/arm/include/asm/page-nommu.h                 |  2 +-
 arch/arm/include/asm/pgalloc.h                    |  4 +--
 arch/arm/kvm/arm.c                                |  2 +-
 arch/arm/kvm/mmu.c                                |  4 +--
 arch/arm64/include/asm/pgalloc.h                  |  6 ++--
 arch/arm64/mm/pgd.c                               |  2 +-
 arch/c6x/include/asm/processor.h                  |  2 +-
 arch/cris/include/asm/pgalloc.h                   |  4 +--
 arch/cris/mm/init.c                               |  2 +-
 arch/frv/include/asm/page.h                       |  2 +-
 arch/frv/include/asm/pgalloc.h                    |  2 +-
 arch/hexagon/include/asm/pgalloc.h                |  4 +--
 arch/ia64/hp/sim/simserial.c                      |  4 +--
 arch/m32r/include/asm/pgalloc.h                   |  4 +--
 arch/m68k/include/asm/mcf_pgalloc.h               |  4 +--
 arch/m68k/include/asm/motorola_pgalloc.h          |  2 +-
 arch/m68k/include/asm/page_mm.h                   |  2 +-
 arch/m68k/include/asm/page_no.h                   |  2 +-
 arch/m68k/include/asm/sun3_pgalloc.h              |  4 +--
 arch/m68k/mm/memory.c                             |  2 +-
 arch/metag/include/asm/pgalloc.h                  |  4 +--
 arch/microblaze/include/asm/pgalloc.h             |  4 +--
 arch/mn10300/include/asm/pgalloc.h                |  2 +-
 arch/openrisc/include/asm/page.h                  |  2 +-
 arch/openrisc/include/asm/pgalloc.h               |  4 +--
 arch/parisc/include/asm/pgalloc.h                 |  2 +-
 arch/powerpc/include/asm/pgalloc-32.h             |  4 +--
 arch/powerpc/include/asm/pgalloc-64.h             |  4 +--
 arch/powerpc/kvm/book3s_pr.c                      |  2 +-
 arch/powerpc/kvm/e500.c                           |  2 +-
 arch/powerpc/kvm/e500mc.c                         |  2 +-
 arch/powerpc/mm/hugetlbpage.c                     |  2 +-
 arch/powerpc/mm/subpage-prot.c                    |  6 ++--
 arch/powerpc/platforms/cell/spufs/coredump.c      |  4 +--
 arch/powerpc/platforms/pseries/cmm.c              | 16 +++++-----
 arch/powerpc/platforms/pseries/pseries_energy.c   |  4 +--
 arch/s390/crypto/aes_s390.c                       |  4 +--
 arch/s390/crypto/des_s390.c                       |  2 +-
 arch/s390/crypto/prng.c                           |  2 +-
 arch/s390/hypfs/hypfs_sprp.c                      |  6 ++--
 arch/s390/kernel/ipl.c                            |  8 ++---
 arch/s390/kernel/kprobes.c                        |  2 +-
 arch/s390/kernel/perf_cpum_sf.c                   |  4 +--
 arch/s390/kernel/setup.c                          |  2 +-
 arch/s390/kernel/smp.c                            |  4 +--
 arch/s390/kernel/suspend.c                        |  2 +-
 arch/s390/kernel/sysinfo.c                        |  4 +--
 arch/s390/kernel/time.c                           |  2 +-
 arch/s390/kernel/vdso.c                           |  8 ++---
 arch/s390/kvm/kvm-s390.c                          | 14 ++++-----
 arch/s390/kvm/priv.c                              |  4 +--
 arch/s390/mm/cmm.c                                |  8 ++---
 arch/s390/mm/maccess.c                            |  4 +--
 arch/s390/mm/pgtable.c                            |  2 +-
 arch/s390/oprofile/hwsampler.c                    |  8 ++---
 arch/sh/boards/mach-hp6xx/pm.c                    |  2 +-
 arch/sparc/kernel/iommu.c                         |  2 +-
 arch/sparc/mm/init_64.c                           |  2 +-
 arch/tile/mm/elf.c                                |  2 +-
 arch/um/drivers/mconsole_kern.c                   |  2 +-
 arch/um/include/asm/pgalloc.h                     |  4 +--
 arch/um/kernel/mem.c                              |  2 +-
 arch/um/kernel/skas/mmu.c                         |  4 +--
 arch/unicore32/include/asm/pgalloc.h              |  2 +-
 arch/x86/include/asm/pgalloc.h                    |  6 ++--
 arch/x86/kernel/cpu/perf_event_intel_pt.c         |  2 +-
 arch/x86/kernel/ldt.c                             |  2 +-
 arch/x86/kernel/machine_kexec_32.c                | 10 +++----
 arch/x86/kernel/machine_kexec_64.c                |  6 ++--
 arch/x86/kvm/lapic.c                              |  2 +-
 arch/x86/kvm/mmu.c                                | 10 +++----
 arch/x86/kvm/vmx.c                                | 36 +++++++++++------------
 arch/x86/kvm/x86.c                                |  4 +--
 arch/x86/mm/pageattr.c                            |  6 ++--
 arch/x86/mm/pgtable.c                             |  8 ++---
 arch/x86/pci/pcbios.c                             |  2 +-
 arch/x86/um/ldt.c                                 |  2 +-
 arch/x86/xen/mmu.c                                |  2 +-
 arch/x86/xen/p2m.c                                |  2 +-
 arch/xtensa/include/asm/pgalloc.h                 |  4 +--
 block/partitions/check.c                          |  4 +--
 crypto/blkcipher.c                                |  2 +-
 crypto/tcrypt.c                                   |  6 ++--
 crypto/testmgr.c                                  |  4 +--
 drivers/acpi/apei/ghes.c                          |  2 +-
 drivers/acpi/nvs.c                                |  2 +-
 drivers/atm/eni.c                                 |  2 +-
 drivers/atm/lanai.c                               |  2 +-
 drivers/auxdisplay/cfag12864b.c                   |  4 +--
 drivers/block/aoe/aoecmd.c                        |  2 +-
 drivers/block/cciss.c                             |  2 +-
 drivers/block/drbd/drbd_main.c                    |  4 +--
 drivers/char/agp/amd-k7-agp.c                     |  2 +-
 drivers/char/agp/ati-agp.c                        |  2 +-
 drivers/char/agp/efficeon-agp.c                   |  2 +-
 drivers/char/agp/sworks-agp.c                     |  2 +-
 drivers/char/mem.c                                |  4 +--
 drivers/char/pcmcia/synclink_cs.c                 |  2 +-
 drivers/char/tpm/tpm_ibmvtpm.c                    |  4 +--
 drivers/char/tpm/xen-tpmfront.c                   |  2 +-
 drivers/char/xilinx_hwicap/xilinx_hwicap.c        | 14 ++++-----
 drivers/crypto/atmel-aes.c                        |  8 ++---
 drivers/crypto/atmel-tdes.c                       |  8 ++---
 drivers/crypto/nx/nx-842.c                        |  8 ++---
 drivers/dma/nbpfaxi.c                             |  2 +-
 drivers/dma/sh/rcar-dmac.c                        |  2 +-
 drivers/extcon/extcon.c                           |  2 +-
 drivers/firewire/ohci.c                           |  4 +--
 drivers/gpu/drm/via/via_dmablit.c                 |  2 +-
 drivers/hsi/clients/cmt_speech.c                  |  4 +--
 drivers/hv/hv.c                                   |  6 ++--
 drivers/ide/ide-proc.c                            |  6 ++--
 drivers/infiniband/core/device.c                  |  2 +-
 drivers/infiniband/core/umem.c                    |  4 +--
 drivers/infiniband/core/umem_odp.c                |  2 +-
 drivers/infiniband/hw/cxgb3/iwch_provider.c       |  2 +-
 drivers/infiniband/hw/cxgb4/device.c              |  2 +-
 drivers/infiniband/hw/cxgb4/mem.c                 |  2 +-
 drivers/infiniband/hw/mlx4/mr.c                   |  2 +-
 drivers/infiniband/hw/mlx5/mr.c                   |  2 +-
 drivers/infiniband/hw/mlx5/odp.c                  |  2 +-
 drivers/infiniband/hw/mthca/mthca_allocator.c     |  4 +--
 drivers/infiniband/hw/mthca/mthca_provider.c      |  2 +-
 drivers/infiniband/hw/qib/qib_qp.c                |  4 +--
 drivers/infiniband/hw/usnic/usnic_uiom.c          |  2 +-
 drivers/input/misc/xen-kbdfront.c                 |  2 +-
 drivers/iommu/amd_iommu.c                         | 18 ++++++------
 drivers/iommu/amd_iommu_v2.c                      |  6 ++--
 drivers/iommu/dmar.c                              |  4 +--
 drivers/iommu/intel-iommu.c                       |  2 +-
 drivers/iommu/msm_iommu.c                         |  5 ++--
 drivers/iommu/rockchip-iommu.c                    |  4 +--
 drivers/irqchip/irq-gic-v3-its.c                  |  2 +-
 drivers/lguest/lguest_user.c                      |  4 +--
 drivers/lguest/page_tables.c                      |  8 ++---
 drivers/macintosh/rack-meter.c                    |  4 +--
 drivers/media/pci/pt1/pt1.c                       |  4 +--
 drivers/media/pci/saa7134/saa7134-go7007.c        |  8 ++---
 drivers/media/pci/ttpci/av7110_ca.c               |  2 +-
 drivers/media/pci/zoran/zoran_driver.c            |  4 +--
 drivers/misc/cxl/context.c                        |  2 +-
 drivers/misc/cxl/pci.c                            |  2 +-
 drivers/misc/ibmasm/ibmasmfs.c                    |  2 +-
 drivers/misc/lkdtm.c                              | 10 +++----
 drivers/net/ethernet/i825xx/82596.c               |  4 +--
 drivers/net/ethernet/ibm/ehea/ehea_main.c         | 26 ++++++++--------
 drivers/net/ethernet/ibm/ehea/ehea_qmr.c          |  8 ++---
 drivers/net/ethernet/ibm/ibmveth.c                |  4 +--
 drivers/net/ethernet/seeq/sgiseeq.c               |  2 +-
 drivers/net/ethernet/sfc/mcdi.c                   |  4 +--
 drivers/net/ethernet/sgi/ioc3-eth.c               |  2 +-
 drivers/net/ethernet/toshiba/ps3_gelic_wireless.c | 12 ++++----
 drivers/net/usb/kaweth.c                          |  2 +-
 drivers/net/wan/z85230.c                          |  8 ++---
 drivers/net/wireless/b43/debugfs.c                |  2 +-
 drivers/net/wireless/b43legacy/debugfs.c          |  2 +-
 drivers/net/wireless/libertas/debugfs.c           | 34 ++++++++++-----------
 drivers/net/wireless/mwifiex/debugfs.c            | 26 ++++++++--------
 drivers/net/wireless/ti/wlcore/main.c             |  4 +--
 drivers/net/xen-netfront.c                        |  4 +--
 drivers/pci/xen-pcifront.c                        |  2 +-
 drivers/platform/x86/dell-laptop.c                |  4 +--
 drivers/power/power_supply_sysfs.c                |  2 +-
 drivers/s390/block/dasd.c                         |  4 +--
 drivers/s390/block/dasd_diag.c                    |  2 +-
 drivers/s390/block/dasd_eckd.c                    |  8 ++---
 drivers/s390/block/dasd_eer.c                     |  2 +-
 drivers/s390/block/dasd_fba.c                     |  2 +-
 drivers/s390/block/scm_blk.c                      |  2 +-
 drivers/s390/block/scm_blk_cluster.c              |  2 +-
 drivers/s390/block/xpram.c                        |  4 +--
 drivers/s390/char/diag_ftp.c                      |  2 +-
 drivers/s390/char/hmcdrv_ftp.c                    |  2 +-
 drivers/s390/char/sclp_async.c                    |  4 +--
 drivers/s390/char/sclp_cmd.c                      | 14 ++++-----
 drivers/s390/char/sclp_cpi_sys.c                  |  2 +-
 drivers/s390/char/sclp_ctl.c                      |  2 +-
 drivers/s390/char/sclp_ftp.c                      |  4 +--
 drivers/s390/char/sclp_vt220.c                    |  2 +-
 drivers/s390/char/vmlogrdr.c                      |  2 +-
 drivers/s390/char/vmur.c                          |  4 +--
 drivers/s390/char/zcore.c                         |  4 +--
 drivers/s390/cio/chsc.c                           | 16 +++++-----
 drivers/s390/cio/chsc_sch.c                       | 24 +++++++--------
 drivers/s390/cio/qdio_main.c                      |  2 +-
 drivers/s390/cio/qdio_setup.c                     | 14 ++++-----
 drivers/s390/cio/scm.c                            |  2 +-
 drivers/s390/crypto/zcrypt_api.c                  |  4 +--
 drivers/s390/crypto/zcrypt_msgtype6.c             |  4 +--
 drivers/s390/crypto/zcrypt_pcixcc.c               |  4 +--
 drivers/s390/net/qeth_core_main.c                 |  9 +++---
 drivers/s390/scsi/zfcp_aux.c                      |  2 +-
 drivers/scsi/cxlflash/main.c                      |  2 +-
 drivers/scsi/cxlflash/superpipe.c                 |  2 +-
 drivers/scsi/ibmvscsi/ibmvfc.c                    |  8 ++---
 drivers/scsi/ibmvscsi/ibmvscsi.c                  |  4 +--
 drivers/scsi/ipr.c                                |  2 +-
 drivers/scsi/scsi_devinfo.c                       |  2 +-
 drivers/scsi/scsi_proc.c                          |  4 +--
 drivers/scsi/xen-scsifront.c                      |  2 +-
 drivers/spi/spi-ep93xx.c                          |  4 +--
 drivers/spi/spi-sh-msiof.c                        |  8 ++---
 drivers/staging/comedi/comedi_buf.c               |  2 +-
 drivers/staging/lustre/lustre/llite/llite_lib.c   |  2 +-
 drivers/staging/rdma/ehca/ehca_iverbs.h           |  2 +-
 drivers/staging/rdma/ehca/ehca_pd.c               |  2 +-
 drivers/staging/rdma/ehca/ipz_pt_fn.c             |  6 ++--
 drivers/staging/rdma/hfi1/qp.c                    |  4 +--
 drivers/staging/rdma/ipath/ipath_qp.c             |  4 +--
 drivers/staging/unisys/visorbus/visorchannel.c    |  2 +-
 drivers/target/target_core_file.c                 |  2 +-
 drivers/tty/amiserial.c                           |  6 ++--
 drivers/tty/cyclades.c                            |  8 ++---
 drivers/tty/hvc/hvc_iucv.c                        |  4 +--
 drivers/tty/hvc/hvc_xen.c                         |  2 +-
 drivers/tty/hvc/hvcs.c                            |  4 +--
 drivers/tty/mxser.c                               |  4 +--
 drivers/tty/rocket.c                              |  4 +--
 drivers/tty/serial/68328serial.c                  |  2 +-
 drivers/tty/serial/crisv10.c                      |  6 ++--
 drivers/tty/serial/men_z135_uart.c                |  4 +--
 drivers/tty/serial/pch_uart.c                     |  4 +--
 drivers/tty/serial/serial_core.c                  |  2 +-
 drivers/tty/synclink.c                            |  2 +-
 drivers/tty/tty_port.c                            |  4 +--
 drivers/tty/vt/vc_screen.c                        |  4 +--
 drivers/usb/atm/cxacru.c                          | 10 +++----
 drivers/usb/atm/speedtch.c                        |  2 +-
 drivers/usb/core/devio.c                          |  2 +-
 drivers/usb/host/ohci-dbg.c                       |  2 +-
 drivers/usb/misc/rio500.c                         | 10 +++----
 drivers/usb/mon/mon_bin.c                         |  4 +--
 drivers/usb/serial/usb_wwan.c                     |  4 +--
 drivers/uwb/hwa-rc.c                              |  4 +--
 drivers/video/fbdev/xen-fbfront.c                 |  2 +-
 drivers/xen/events/events_base.c                  |  2 +-
 drivers/xen/events/events_fifo.c                  |  6 ++--
 drivers/xen/evtchn.c                              |  2 +-
 drivers/xen/grant-table.c                         |  6 ++--
 drivers/xen/xenbus/xenbus_probe.c                 |  2 +-
 fs/affs/inode.c                                   |  2 +-
 fs/afs/mntpt.c                                    |  8 ++---
 fs/bfs/inode.c                                    |  2 +-
 fs/binfmt_misc.c                                  |  2 +-
 fs/compat.c                                       |  2 +-
 fs/configfs/file.c                                |  2 +-
 fs/configfs/symlink.c                             |  2 +-
 fs/ext4/super.c                                   |  2 +-
 fs/fuse/dir.c                                     |  2 +-
 fs/fuse/file.c                                    |  2 +-
 fs/isofs/dir.c                                    |  2 +-
 fs/jfs/jfs_dtree.c                                |  4 +--
 fs/jfs/jfs_logmgr.c                               |  2 +-
 fs/kernfs/symlink.c                               |  2 +-
 fs/libfs.c                                        |  6 ++--
 fs/namespace.c                                    |  4 +--
 fs/nfs/namespace.c                                |  2 +-
 fs/nfs/nfs4namespace.c                            |  8 ++---
 fs/nfs/super.c                                    |  2 +-
 fs/nfsd/vfs.c                                     |  2 +-
 fs/ocfs2/dlm/dlmdebug.c                           |  4 +--
 fs/ocfs2/dlm/dlmdomain.c                          |  2 +-
 fs/ocfs2/dlm/dlmmaster.c                          |  2 +-
 fs/ocfs2/dlm/dlmrecovery.c                        |  2 +-
 fs/overlayfs/copy_up.c                            |  4 +--
 fs/proc/base.c                                    | 10 +++----
 fs/select.c                                       |  2 +-
 include/asm-generic/page.h                        |  2 +-
 include/linux/gfp.h                               |  2 +-
 include/linux/security.h                          |  2 +-
 kernel/events/ring_buffer.c                       |  4 +--
 kernel/groups.c                                   |  4 +--
 kernel/power/swap.c                               | 10 +++----
 kernel/sysctl.c                                   | 10 +++----
 kernel/trace/ftrace.c                             |  2 +-
 kernel/trace/ring_buffer.c                        |  4 +--
 kernel/trace/trace_events.c                       |  8 ++---
 kernel/trace/trace_events_filter.c                |  2 +-
 kernel/trace/trace_events_trigger.c               |  6 ++--
 kernel/trace/trace_uprobe.c                       |  5 ++--
 kernel/user_namespace.c                           |  2 +-
 lib/scatterlist.c                                 |  2 +-
 mm/memory.c                                       |  4 +--
 mm/migrate.c                                      |  2 +-
 mm/mincore.c                                      |  2 +-
 mm/page_alloc.c                                   |  4 +--
 mm/quicklist.c                                    |  2 +-
 mm/slub.c                                         |  2 +-
 net/atm/mpoa_proc.c                               |  4 +--
 net/atm/proc.c                                    |  2 +-
 net/core/dev.c                                    |  2 +-
 net/netfilter/nf_tables_api.c                     |  2 +-
 net/rds/cong.c                                    |  4 +--
 net/sunrpc/backchannel_rqst.c                     |  4 +--
 net/sunrpc/xprtsock.c                             |  2 +-
 security/selinux/hooks.c                          |  4 +--
 security/selinux/selinuxfs.c                      | 20 ++++++-------
 security/smack/smack_lsm.c                        |  2 +-
 sound/drivers/dummy.c                             |  2 +-
 sound/oss/msnd_pinnacle.c                         | 16 +++++-----
 sound/oss/vidc.c                                  |  4 +--
 sound/pci/emu10k1/memory.c                        |  2 +-
 tools/virtio/linux/kernel.h                       |  4 +--
 virt/kvm/coalesced_mmio.c                         |  2 +-
 virt/kvm/kvm_main.c                               |  4 +--
 310 files changed, 666 insertions(+), 669 deletions(-)

diff --git a/arch/alpha/include/asm/pgalloc.h b/arch/alpha/include/asm/pgalloc.h
index aab14a0..078da57 100644
--- a/arch/alpha/include/asm/pgalloc.h
+++ b/arch/alpha/include/asm/pgalloc.h
@@ -34,7 +34,7 @@ extern pgd_t *pgd_alloc(struct mm_struct *mm);
 static inline void
 pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-	free_page((unsigned long)pgd);
+	free_page(pgd);
 }
 
 static inline pmd_t *
@@ -47,7 +47,7 @@ pmd_alloc_one(struct mm_struct *mm, unsigned long address)
 static inline void
 pmd_free(struct mm_struct *mm, pmd_t *pmd)
 {
-	free_page((unsigned long)pmd);
+	free_page(pmd);
 }
 
 static inline pte_t *
@@ -60,7 +60,7 @@ pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
 static inline void
 pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static inline pgtable_t
diff --git a/arch/alpha/kernel/srm_env.c b/arch/alpha/kernel/srm_env.c
index ffe996a..a66f23b 100644
--- a/arch/alpha/kernel/srm_env.c
+++ b/arch/alpha/kernel/srm_env.c
@@ -93,7 +93,7 @@ static int srm_env_proc_show(struct seq_file *m, void *v)
 		ret = 0;
 	} else
 		ret = -EFAULT;
-	free_page((unsigned long)page);
+	free_page(page);
 	return ret;
 }
 
@@ -131,7 +131,7 @@ static ssize_t srm_env_proc_write(struct file *file, const char __user *buffer,
 	}
 
  out:
-	free_page((unsigned long)buf);
+	free_page(buf);
 	return res;
 }
 
diff --git a/arch/arc/include/asm/page.h b/arch/arc/include/asm/page.h
index 429957f..fa23f40 100644
--- a/arch/arc/include/asm/page.h
+++ b/arch/arc/include/asm/page.h
@@ -14,7 +14,7 @@
 #ifndef __ASSEMBLY__
 
 #define get_user_page(vaddr)		__get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)	free_page(addr)
+#define free_user_page(page, addr)	free_page((void *)addr)
 
 #define clear_page(paddr)		memset((paddr), 0, PAGE_SIZE)
 #define copy_page(to, from)		memcpy((to), (from), PAGE_SIZE)
diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c
index c33e77c..56fd4fc 100644
--- a/arch/arc/kernel/setup.c
+++ b/arch/arc/kernel/setup.c
@@ -488,7 +488,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
 	seq_printf(m, arc_extn_mumbojumbo(cpu_id, str, PAGE_SIZE));
 	seq_printf(m, arc_platform_smp_cpuinfo());
 
-	free_page((unsigned long)str);
+	free_page(str);
 done:
 	seq_printf(m, "\n");
 
diff --git a/arch/arc/kernel/troubleshoot.c b/arch/arc/kernel/troubleshoot.c
index a6f91e8..eb3464d 100644
--- a/arch/arc/kernel/troubleshoot.c
+++ b/arch/arc/kernel/troubleshoot.c
@@ -222,7 +222,7 @@ void show_regs(struct pt_regs *regs)
 	if (cregs)
 		show_callee_regs(cregs);
 
-	free_page((unsigned long)buf);
+	free_page(buf);
 }
 
 void show_kernel_fault_diag(const char *str, struct pt_regs *regs,
@@ -309,7 +309,7 @@ static ssize_t tlb_stats_clear(struct file *file, const char __user *user_buf,
 
 static int tlb_stats_close(struct inode *inode, struct file *file)
 {
-	free_page((unsigned long)(file->private_data));
+	free_page(file->private_data);
 	return 0;
 }
 
diff --git a/arch/arm/include/asm/page-nommu.h b/arch/arm/include/asm/page-nommu.h
index d1b162a..c4f6081 100644
--- a/arch/arm/include/asm/page-nommu.h
+++ b/arch/arm/include/asm/page-nommu.h
@@ -18,7 +18,7 @@
 #endif
  
 #define get_user_page(vaddr)		__get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)	free_page(addr)
+#define free_user_page(page, addr)	free_page((void *)addr)
 
 #define clear_page(page)	memset((page), 0, PAGE_SIZE)
 #define copy_page(to,from)	memcpy((to), (from), PAGE_SIZE)
diff --git a/arch/arm/include/asm/pgalloc.h b/arch/arm/include/asm/pgalloc.h
index 19cfab5..540647d 100644
--- a/arch/arm/include/asm/pgalloc.h
+++ b/arch/arm/include/asm/pgalloc.h
@@ -35,7 +35,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
 static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
 {
 	BUG_ON((unsigned long)pmd & (PAGE_SIZE-1));
-	free_page((unsigned long)pmd);
+	free_page(pmd);
 }
 
 static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
@@ -119,7 +119,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long addr)
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
 	if (pte)
-		free_page((unsigned long)pte);
+		free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
index e06fd29..08fe183 100644
--- a/arch/arm/kvm/arm.c
+++ b/arch/arm/kvm/arm.c
@@ -1136,7 +1136,7 @@ out_free_mappings:
 	free_hyp_pgds();
 out_free_stack_pages:
 	for_each_possible_cpu(cpu)
-		free_page(per_cpu(kvm_arm_hyp_stack_page, cpu));
+		free_page((void *)per_cpu(kvm_arm_hyp_stack_page, cpu));
 out_err:
 	kvm_err("error initializing Hyp mode: %d\n", err);
 	return err;
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
index 61d96a6..5de6c6b 100644
--- a/arch/arm/kvm/mmu.c
+++ b/arch/arm/kvm/mmu.c
@@ -142,7 +142,7 @@ static int mmu_topup_memory_cache(struct kvm_mmu_memory_cache *cache,
 static void mmu_free_memory_cache(struct kvm_mmu_memory_cache *mc)
 {
 	while (mc->nobjs)
-		free_page((unsigned long)mc->objects[--mc->nobjs]);
+		free_page(mc->objects[--mc->nobjs]);
 }
 
 static void *mmu_memory_cache_alloc(struct kvm_mmu_memory_cache *mc)
@@ -441,7 +441,7 @@ void free_hyp_pgds(void)
 	}
 	if (merged_hyp_pgd) {
 		clear_page(merged_hyp_pgd);
-		free_page((unsigned long)merged_hyp_pgd);
+		free_page(merged_hyp_pgd);
 		merged_hyp_pgd = NULL;
 	}
 
diff --git a/arch/arm64/include/asm/pgalloc.h b/arch/arm64/include/asm/pgalloc.h
index c150539..ce9b3c0 100644
--- a/arch/arm64/include/asm/pgalloc.h
+++ b/arch/arm64/include/asm/pgalloc.h
@@ -39,7 +39,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
 static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
 {
 	BUG_ON((unsigned long)pmd & (PAGE_SIZE-1));
-	free_page((unsigned long)pmd);
+	free_page(pmd);
 }
 
 static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
@@ -59,7 +59,7 @@ static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
 static inline void pud_free(struct mm_struct *mm, pud_t *pud)
 {
 	BUG_ON((unsigned long)pud & (PAGE_SIZE-1));
-	free_page((unsigned long)pud);
+	free_page(pud);
 }
 
 static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud)
@@ -99,7 +99,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long addr)
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
 	if (pte)
-		free_page((unsigned long)pte);
+		free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
diff --git a/arch/arm64/mm/pgd.c b/arch/arm64/mm/pgd.c
index cb3ba1b..a468648 100644
--- a/arch/arm64/mm/pgd.c
+++ b/arch/arm64/mm/pgd.c
@@ -41,7 +41,7 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
 void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
 	if (PGD_SIZE == PAGE_SIZE)
-		free_page((unsigned long)pgd);
+		free_page(pgd);
 	else
 		kmem_cache_free(pgd_cache, pgd);
 }
diff --git a/arch/c6x/include/asm/processor.h b/arch/c6x/include/asm/processor.h
index f2ef31b..b5b5a87 100644
--- a/arch/c6x/include/asm/processor.h
+++ b/arch/c6x/include/asm/processor.h
@@ -78,7 +78,7 @@ struct thread_struct {
 	((struct pt_regs *)(THREAD_START_SP + task_stack_page(task)) - 1)
 
 #define alloc_kernel_stack()	__get_free_page(GFP_KERNEL)
-#define free_kernel_stack(page) free_page((page))
+#define free_kernel_stack(page) free_page((void *)(page))
 
 
 /* Forward declaration, a strange C thing */
diff --git a/arch/cris/include/asm/pgalloc.h b/arch/cris/include/asm/pgalloc.h
index 235ece4..cac8206 100644
--- a/arch/cris/include/asm/pgalloc.h
+++ b/arch/cris/include/asm/pgalloc.h
@@ -19,7 +19,7 @@ static inline pgd_t *pgd_alloc (struct mm_struct *mm)
 
 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-	free_page((unsigned long)pgd);
+	free_page(pgd);
 }
 
 static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
@@ -43,7 +43,7 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addres
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
diff --git a/arch/cris/mm/init.c b/arch/cris/mm/init.c
index 1e7fd45..dd87022 100644
--- a/arch/cris/mm/init.c
+++ b/arch/cris/mm/init.c
@@ -42,7 +42,7 @@ void free_init_pages(const char *what, unsigned long begin, unsigned long end)
 	for (addr = begin; addr < end; addr += PAGE_SIZE) {
 		ClearPageReserved(virt_to_page(addr));
 		init_page_count(virt_to_page(addr));
-		free_page(addr);
+		free_page((void *)addr);
 		totalram_pages++;
 	}
 
diff --git a/arch/frv/include/asm/page.h b/arch/frv/include/asm/page.h
index 8c97068..870960c 100644
--- a/arch/frv/include/asm/page.h
+++ b/arch/frv/include/asm/page.h
@@ -9,7 +9,7 @@
 #ifndef __ASSEMBLY__
 
 #define get_user_page(vaddr)			__get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)		free_page(addr)
+#define free_user_page(page, addr)		free_page((void *)addr)
 
 #define clear_page(pgaddr)			memset((pgaddr), 0, PAGE_SIZE)
 #define copy_page(to,from)			memcpy((to), (from), PAGE_SIZE)
diff --git a/arch/frv/include/asm/pgalloc.h b/arch/frv/include/asm/pgalloc.h
index 416d19a..1fc047c 100644
--- a/arch/frv/include/asm/pgalloc.h
+++ b/arch/frv/include/asm/pgalloc.h
@@ -40,7 +40,7 @@ extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long);
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
diff --git a/arch/hexagon/include/asm/pgalloc.h b/arch/hexagon/include/asm/pgalloc.h
index 77da3b0..48c04dc 100644
--- a/arch/hexagon/include/asm/pgalloc.h
+++ b/arch/hexagon/include/asm/pgalloc.h
@@ -56,7 +56,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 
 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-	free_page((unsigned long) pgd);
+	free_page(pgd);
 }
 
 static inline struct page *pte_alloc_one(struct mm_struct *mm,
@@ -90,7 +90,7 @@ static inline void pte_free(struct mm_struct *mm, struct page *pte)
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c
index e70cade..36b3217 100644
--- a/arch/ia64/hp/sim/simserial.c
+++ b/arch/ia64/hp/sim/simserial.c
@@ -339,7 +339,7 @@ static void shutdown(struct tty_port *port)
 		free_irq(info->irq, info);
 
 	if (info->xmit.buf) {
-		free_page((unsigned long) info->xmit.buf);
+		free_page(info->xmit.buf);
 		info->xmit.buf = NULL;
 	}
 	local_irq_restore(flags);
@@ -374,7 +374,7 @@ static int activate(struct tty_port *port, struct tty_struct *tty)
 	local_irq_save(flags);
 
 	if (state->xmit.buf)
-		free_page(page);
+		free_page((void *)page);
 	else
 		state->xmit.buf = (unsigned char *) page;
 
diff --git a/arch/m32r/include/asm/pgalloc.h b/arch/m32r/include/asm/pgalloc.h
index 2d55a06..3923429 100644
--- a/arch/m32r/include/asm/pgalloc.h
+++ b/arch/m32r/include/asm/pgalloc.h
@@ -27,7 +27,7 @@ static __inline__ pgd_t *pgd_alloc(struct mm_struct *mm)
 
 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-	free_page((unsigned long)pgd);
+	free_page(pgd);
 }
 
 static __inline__ pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
@@ -54,7 +54,7 @@ static __inline__ pgtable_t pte_alloc_one(struct mm_struct *mm,
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
diff --git a/arch/m68k/include/asm/mcf_pgalloc.h b/arch/m68k/include/asm/mcf_pgalloc.h
index f9924fb..2e70a56 100644
--- a/arch/m68k/include/asm/mcf_pgalloc.h
+++ b/arch/m68k/include/asm/mcf_pgalloc.h
@@ -6,7 +6,7 @@
 
 extern inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long) pte);
+	free_page(pte);
 }
 
 extern const char bad_pmd_string[];
@@ -86,7 +86,7 @@ extern inline void pte_free(struct mm_struct *mm, struct page *page)
 
 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-	free_page((unsigned long) pgd);
+	free_page(pgd);
 }
 
 static inline pgd_t *pgd_alloc(struct mm_struct *mm)
diff --git a/arch/m68k/include/asm/motorola_pgalloc.h b/arch/m68k/include/asm/motorola_pgalloc.h
index 24bcba4..6e84224 100644
--- a/arch/m68k/include/asm/motorola_pgalloc.h
+++ b/arch/m68k/include/asm/motorola_pgalloc.h
@@ -24,7 +24,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long ad
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
 	cache_page(pte);
-	free_page((unsigned long) pte);
+	free_page(pte);
 }
 
 static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address)
diff --git a/arch/m68k/include/asm/page_mm.h b/arch/m68k/include/asm/page_mm.h
index 5029f73..1a735f8 100644
--- a/arch/m68k/include/asm/page_mm.h
+++ b/arch/m68k/include/asm/page_mm.h
@@ -7,7 +7,7 @@
 #include <asm/module.h>
 
 #define get_user_page(vaddr)		__get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)	free_page(addr)
+#define free_user_page(page, addr)	free_page((void *)addr)
 
 /*
  * We don't need to check for alignment etc.
diff --git a/arch/m68k/include/asm/page_no.h b/arch/m68k/include/asm/page_no.h
index ef20916..1f9ec40 100644
--- a/arch/m68k/include/asm/page_no.h
+++ b/arch/m68k/include/asm/page_no.h
@@ -7,7 +7,7 @@ extern unsigned long memory_start;
 extern unsigned long memory_end;
 
 #define get_user_page(vaddr)		__get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)	free_page(addr)
+#define free_user_page(page, addr)	free_page((void *)addr)
 
 #define clear_page(page)	memset((page), 0, PAGE_SIZE)
 #define copy_page(to,from)	memcpy((to), (from), PAGE_SIZE)
diff --git a/arch/m68k/include/asm/sun3_pgalloc.h b/arch/m68k/include/asm/sun3_pgalloc.h
index 0931388..ab0fd5c 100644
--- a/arch/m68k/include/asm/sun3_pgalloc.h
+++ b/arch/m68k/include/asm/sun3_pgalloc.h
@@ -19,7 +19,7 @@ extern const char bad_pmd_string[];
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-        free_page((unsigned long) pte);
+        free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t page)
@@ -83,7 +83,7 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, pgtable_t page
 
 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-        free_page((unsigned long) pgd);
+        free_page(pgd);
 }
 
 static inline pgd_t * pgd_alloc(struct mm_struct *mm)
diff --git a/arch/m68k/mm/memory.c b/arch/m68k/mm/memory.c
index 51bc9d2..d812b57 100644
--- a/arch/m68k/mm/memory.c
+++ b/arch/m68k/mm/memory.c
@@ -114,7 +114,7 @@ int free_pointer_table (pmd_t *ptable)
 		/* all tables in page are free, free page */
 		list_del(dp);
 		cache_page((void *)page);
-		free_page (page);
+		free_page((void *)page);
 		return 1;
 	} else if (ptable_list.next != dp) {
 		/*
diff --git a/arch/metag/include/asm/pgalloc.h b/arch/metag/include/asm/pgalloc.h
index 3104df0..cf9e2fb 100644
--- a/arch/metag/include/asm/pgalloc.h
+++ b/arch/metag/include/asm/pgalloc.h
@@ -36,7 +36,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 
 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-	free_page((unsigned long)pgd);
+	free_page(pgd);
 }
 
 static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
@@ -63,7 +63,7 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
diff --git a/arch/microblaze/include/asm/pgalloc.h b/arch/microblaze/include/asm/pgalloc.h
index 61436d6..5e3fc6c 100644
--- a/arch/microblaze/include/asm/pgalloc.h
+++ b/arch/microblaze/include/asm/pgalloc.h
@@ -93,7 +93,7 @@ static inline void free_pgd_fast(pgd_t *pgd)
 
 static inline void free_pgd_slow(pgd_t *pgd)
 {
-	free_page((unsigned long)pgd);
+	free_page(pgd);
 }
 
 #define pgd_free(mm, pgd)        free_pgd_fast(pgd)
@@ -155,7 +155,7 @@ static inline void pte_free_fast(pte_t *pte)
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static inline void pte_free_slow(struct page *ptepage)
diff --git a/arch/mn10300/include/asm/pgalloc.h b/arch/mn10300/include/asm/pgalloc.h
index 0f25d5f..f07e2d1 100644
--- a/arch/mn10300/include/asm/pgalloc.h
+++ b/arch/mn10300/include/asm/pgalloc.h
@@ -41,7 +41,7 @@ extern struct page *pte_alloc_one(struct mm_struct *, unsigned long);
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long) pte);
+	free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, struct page *pte)
diff --git a/arch/openrisc/include/asm/page.h b/arch/openrisc/include/asm/page.h
index 108906f..8ab6f6f 100644
--- a/arch/openrisc/include/asm/page.h
+++ b/arch/openrisc/include/asm/page.h
@@ -41,7 +41,7 @@
 #ifndef __ASSEMBLY__
 
 #define get_user_page(vaddr)            __get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)      free_page(addr)
+#define free_user_page(page, addr)      free_page((void *)addr)
 
 #define clear_page(page)	memset((page), 0, PAGE_SIZE)
 #define copy_page(to, from)	memcpy((to), (from), PAGE_SIZE)
diff --git a/arch/openrisc/include/asm/pgalloc.h b/arch/openrisc/include/asm/pgalloc.h
index 21484e5b..1f61391 100644
--- a/arch/openrisc/include/asm/pgalloc.h
+++ b/arch/openrisc/include/asm/pgalloc.h
@@ -68,7 +68,7 @@ extern inline pgd_t *pgd_alloc(struct mm_struct *mm)
 
 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-	free_page((unsigned long)pgd);
+	free_page(pgd);
 }
 
 extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address);
@@ -90,7 +90,7 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm,
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, struct page *pte)
diff --git a/arch/parisc/include/asm/pgalloc.h b/arch/parisc/include/asm/pgalloc.h
index f2fd327..daca63d 100644
--- a/arch/parisc/include/asm/pgalloc.h
+++ b/arch/parisc/include/asm/pgalloc.h
@@ -143,7 +143,7 @@ pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, struct page *pte)
diff --git a/arch/powerpc/include/asm/pgalloc-32.h b/arch/powerpc/include/asm/pgalloc-32.h
index 842846c..d25a3c3 100644
--- a/arch/powerpc/include/asm/pgalloc-32.h
+++ b/arch/powerpc/include/asm/pgalloc-32.h
@@ -39,7 +39,7 @@ extern pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr);
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t ptepage)
@@ -51,7 +51,7 @@ static inline void pte_free(struct mm_struct *mm, pgtable_t ptepage)
 static inline void pgtable_free(void *table, unsigned index_size)
 {
 	BUG_ON(index_size); /* 32-bit doesn't use this */
-	free_page((unsigned long)table);
+	free_page(table);
 }
 
 #define check_pgt_cache()	do { } while (0)
diff --git a/arch/powerpc/include/asm/pgalloc-64.h b/arch/powerpc/include/asm/pgalloc-64.h
index 4b0be20..c26021b 100644
--- a/arch/powerpc/include/asm/pgalloc-64.h
+++ b/arch/powerpc/include/asm/pgalloc-64.h
@@ -101,7 +101,7 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t ptepage)
@@ -113,7 +113,7 @@ static inline void pte_free(struct mm_struct *mm, pgtable_t ptepage)
 static inline void pgtable_free(void *table, unsigned index_size)
 {
 	if (!index_size)
-		free_page((unsigned long)table);
+		free_page(table);
 	else {
 		BUG_ON(index_size > MAX_PGTABLE_INDEX_SIZE);
 		kmem_cache_free(PGT_CACHE(index_size), table);
diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c
index 64891b0..3775664 100644
--- a/arch/powerpc/kvm/book3s_pr.c
+++ b/arch/powerpc/kvm/book3s_pr.c
@@ -1452,7 +1452,7 @@ static void kvmppc_core_vcpu_free_pr(struct kvm_vcpu *vcpu)
 {
 	struct kvmppc_vcpu_book3s *vcpu_book3s = to_book3s(vcpu);
 
-	free_page((unsigned long)vcpu->arch.shared & PAGE_MASK);
+	free_page((void *)((unsigned long)vcpu->arch.shared & PAGE_MASK));
 	kvm_vcpu_uninit(vcpu);
 #ifdef CONFIG_KVM_BOOK3S_32_HANDLER
 	kfree(vcpu->arch.shadow_vcpu);
diff --git a/arch/powerpc/kvm/e500.c b/arch/powerpc/kvm/e500.c
index 32fdab5..29803fb 100644
--- a/arch/powerpc/kvm/e500.c
+++ b/arch/powerpc/kvm/e500.c
@@ -484,7 +484,7 @@ static void kvmppc_core_vcpu_free_e500(struct kvm_vcpu *vcpu)
 {
 	struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
 
-	free_page((unsigned long)vcpu->arch.shared);
+	free_page(vcpu->arch.shared);
 	kvmppc_e500_tlb_uninit(vcpu_e500);
 	kvmppc_e500_id_table_free(vcpu_e500);
 	kvm_vcpu_uninit(vcpu);
diff --git a/arch/powerpc/kvm/e500mc.c b/arch/powerpc/kvm/e500mc.c
index cda695d..e002a71 100644
--- a/arch/powerpc/kvm/e500mc.c
+++ b/arch/powerpc/kvm/e500mc.c
@@ -351,7 +351,7 @@ static void kvmppc_core_vcpu_free_e500mc(struct kvm_vcpu *vcpu)
 {
 	struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
 
-	free_page((unsigned long)vcpu->arch.shared);
+	free_page(vcpu->arch.shared);
 	kvmppc_e500_tlb_uninit(vcpu_e500);
 	kvm_vcpu_uninit(vcpu);
 	kmem_cache_free(kvm_vcpu_cache, vcpu_e500);
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index 9833fee..a466b84 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -479,7 +479,7 @@ static void hugepd_free_rcu_callback(struct rcu_head *head)
 	for (i = 0; i < batch->index; i++)
 		kmem_cache_free(hugepte_cache, batch->ptes[i]);
 
-	free_page((unsigned long)batch);
+	free_page(batch);
 }
 
 static void hugepd_free(struct mmu_gather *tlb, void *hugepte)
diff --git a/arch/powerpc/mm/subpage-prot.c b/arch/powerpc/mm/subpage-prot.c
index fa9fb5b..6f962db 100644
--- a/arch/powerpc/mm/subpage-prot.c
+++ b/arch/powerpc/mm/subpage-prot.c
@@ -31,7 +31,7 @@ void subpage_prot_free(struct mm_struct *mm)
 
 	for (i = 0; i < 4; ++i) {
 		if (spt->low_prot[i]) {
-			free_page((unsigned long)spt->low_prot[i]);
+			free_page(spt->low_prot[i]);
 			spt->low_prot[i] = NULL;
 		}
 	}
@@ -44,8 +44,8 @@ void subpage_prot_free(struct mm_struct *mm)
 		for (j = 0; j < SBP_L2_COUNT && addr < spt->maxaddr;
 		     ++j, addr += PAGE_SIZE)
 			if (p[j])
-				free_page((unsigned long)p[j]);
-		free_page((unsigned long)p);
+				free_page(p[j]);
+		free_page(p);
 	}
 	spt->maxaddr = 0;
 }
diff --git a/arch/powerpc/platforms/cell/spufs/coredump.c b/arch/powerpc/platforms/cell/spufs/coredump.c
index be6212d..766c41d 100644
--- a/arch/powerpc/platforms/cell/spufs/coredump.c
+++ b/arch/powerpc/platforms/cell/spufs/coredump.c
@@ -175,10 +175,10 @@ static int spufs_arch_write_note(struct spu_context *ctx, int i,
 		       roundup(cprm->written - total + sz, 4) - cprm->written))
 		goto Eio;
 out:
-	free_page((unsigned long)buf);
+	free_page(buf);
 	return rc;
 Eio:
-	free_page((unsigned long)buf);
+	free_page(buf);
 	return -EIO;
 }
 
diff --git a/arch/powerpc/platforms/pseries/cmm.c b/arch/powerpc/platforms/pseries/cmm.c
index fc44ad0..db1dbe6 100644
--- a/arch/powerpc/platforms/pseries/cmm.c
+++ b/arch/powerpc/platforms/pseries/cmm.c
@@ -150,7 +150,7 @@ static long cmm_alloc_pages(long nr)
 					__GFP_NORETRY | __GFP_NOMEMALLOC);
 			if (!npa) {
 				pr_info("%s: Can not allocate new page list\n", __func__);
-				free_page(addr);
+				free_page((void *)addr);
 				break;
 			}
 			spin_lock(&cmm_lock);
@@ -162,13 +162,13 @@ static long cmm_alloc_pages(long nr)
 				pa = npa;
 				cmm_page_list = pa;
 			} else
-				free_page((unsigned long) npa);
+				free_page(npa);
 		}
 
 		if ((rc = plpar_page_set_loaned(__pa(addr)))) {
 			pr_err("%s: Can not set page to loaned. rc=%ld\n", __func__, rc);
 			spin_unlock(&cmm_lock);
-			free_page(addr);
+			free_page((void *)addr);
 			break;
 		}
 
@@ -205,12 +205,12 @@ static long cmm_free_pages(long nr)
 
 		if (pa->index == 0) {
 			pa = pa->next;
-			free_page((unsigned long) cmm_page_list);
+			free_page(cmm_page_list);
 			cmm_page_list = pa;
 		}
 
 		plpar_page_set_active(__pa(addr));
-		free_page(addr);
+		free_page((void *)addr);
 		loaned_pages--;
 		nr--;
 		totalram_pages++;
@@ -544,7 +544,7 @@ static int cmm_mem_going_offline(void *arg)
 				continue;
 
 			plpar_page_set_active(__pa(pa_curr->page[idx]));
-			free_page(pa_curr->page[idx]);
+			free_page((void *)pa_curr->page[idx]);
 			freed++;
 			loaned_pages--;
 			totalram_pages++;
@@ -553,7 +553,7 @@ static int cmm_mem_going_offline(void *arg)
 				if (pa_curr == pa_last)
 					pa_curr = pa_last->next;
 				pa_last = pa_last->next;
-				free_page((unsigned long)cmm_page_list);
+				free_page(cmm_page_list);
 				cmm_page_list = pa_last;
 			}
 		}
@@ -581,7 +581,7 @@ static int cmm_mem_going_offline(void *arg)
 				cmm_page_list = npa;
 			if (pa_last)
 				pa_last->next = npa;
-			free_page((unsigned long) pa_curr);
+			free_page(pa_curr);
 			freed++;
 			pa_curr = npa;
 		}
diff --git a/arch/powerpc/platforms/pseries/pseries_energy.c b/arch/powerpc/platforms/pseries/pseries_energy.c
index 9276779..26eac2a 100644
--- a/arch/powerpc/platforms/pseries/pseries_energy.c
+++ b/arch/powerpc/platforms/pseries/pseries_energy.c
@@ -131,7 +131,7 @@ static ssize_t get_best_energy_list(char *page, int activate)
 	rc = plpar_hcall9(H_BEST_ENERGY, retbuf, flags, 0, __pa(buf_page),
 				0, 0, 0, 0, 0, 0);
 	if (rc != H_SUCCESS) {
-		free_page((unsigned long) buf_page);
+		free_page(buf_page);
 		return -EINVAL;
 	}
 
@@ -147,7 +147,7 @@ static ssize_t get_best_energy_list(char *page, int activate)
 		s += sprintf(s, "\n");
 	}
 
-	free_page((unsigned long) buf_page);
+	free_page(buf_page);
 	return s-page;
 }
 
diff --git a/arch/s390/crypto/aes_s390.c b/arch/s390/crypto/aes_s390.c
index 0b9b95f..4b610d6 100644
--- a/arch/s390/crypto/aes_s390.c
+++ b/arch/s390/crypto/aes_s390.c
@@ -943,7 +943,7 @@ static int __init aes_s390_init(void)
 		}
 		ret = crypto_register_alg(&ctr_aes_alg);
 		if (ret) {
-			free_page((unsigned long) ctrblk);
+			free_page(ctrblk);
 			goto ctr_aes_err;
 		}
 		ctr_aes_alg_reg = 1;
@@ -968,7 +968,7 @@ static void __exit aes_s390_fini(void)
 {
 	if (ctr_aes_alg_reg) {
 		crypto_unregister_alg(&ctr_aes_alg);
-		free_page((unsigned long) ctrblk);
+		free_page(ctrblk);
 	}
 	if (xts_aes_alg_reg)
 		crypto_unregister_alg(&xts_aes_alg);
diff --git a/arch/s390/crypto/des_s390.c b/arch/s390/crypto/des_s390.c
index fba1c10..9f402dc 100644
--- a/arch/s390/crypto/des_s390.c
+++ b/arch/s390/crypto/des_s390.c
@@ -607,7 +607,7 @@ static void __exit des_s390_exit(void)
 	if (ctrblk) {
 		crypto_unregister_alg(&ctr_des_alg);
 		crypto_unregister_alg(&ctr_des3_alg);
-		free_page((unsigned long) ctrblk);
+		free_page(ctrblk);
 	}
 	crypto_unregister_alg(&cbc_des3_alg);
 	crypto_unregister_alg(&ecb_des3_alg);
diff --git a/arch/s390/crypto/prng.c b/arch/s390/crypto/prng.c
index b8045b9..d3835d2 100644
--- a/arch/s390/crypto/prng.c
+++ b/arch/s390/crypto/prng.c
@@ -150,7 +150,7 @@ static int generate_entropy(u8 *ebuf, size_t nbytes)
 	}
 
 out:
-	free_page((unsigned long)pg);
+	free_page(pg);
 	return ret;
 }
 
diff --git a/arch/s390/hypfs/hypfs_sprp.c b/arch/s390/hypfs/hypfs_sprp.c
index c9e5c72..8d98c96 100644
--- a/arch/s390/hypfs/hypfs_sprp.c
+++ b/arch/s390/hypfs/hypfs_sprp.c
@@ -43,7 +43,7 @@ static unsigned long hypfs_sprp_diag304(void *data, unsigned long cmd)
 
 static void hypfs_sprp_free(const void *data)
 {
-	free_page((unsigned long) data);
+	free_page(data);
 }
 
 static int hypfs_sprp_create(void **data_ptr, void **free_ptr, size_t *size)
@@ -58,7 +58,7 @@ static int hypfs_sprp_create(void **data_ptr, void **free_ptr, size_t *size)
 	if (rc != 1) {
 		*data_ptr = *free_ptr = NULL;
 		*size = 0;
-		free_page((unsigned long) data);
+		free_page(data);
 		return -EIO;
 	}
 	*data_ptr = *free_ptr = data;
@@ -102,7 +102,7 @@ static int __hypfs_sprp_ioctl(void __user *user_area)
 
 	rc = copy_to_user(user_area, &diag304, sizeof(diag304)) ? -EFAULT : 0;
 out:
-	free_page((unsigned long) data);
+	free_page(data);
 	return rc;
 }
 
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index b1f0a90..b1f6414 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
@@ -1240,14 +1240,14 @@ static int __init reipl_fcp_init(void)
 	reipl_fcp_kset = kset_create_and_add(IPL_FCP_STR, NULL,
 					     &reipl_kset->kobj);
 	if (!reipl_fcp_kset) {
-		free_page((unsigned long) reipl_block_fcp);
+		free_page(reipl_block_fcp);
 		return -ENOMEM;
 	}
 
 	rc = sysfs_create_group(&reipl_fcp_kset->kobj, &reipl_fcp_attr_group);
 	if (rc) {
 		kset_unregister(reipl_fcp_kset);
-		free_page((unsigned long) reipl_block_fcp);
+		free_page(reipl_block_fcp);
 		return rc;
 	}
 
@@ -1474,7 +1474,7 @@ static int __init dump_ccw_init(void)
 		return -ENOMEM;
 	rc = sysfs_create_group(&dump_kset->kobj, &dump_ccw_attr_group);
 	if (rc) {
-		free_page((unsigned long)dump_block_ccw);
+		free_page(dump_block_ccw);
 		return rc;
 	}
 	dump_block_ccw->hdr.len = IPL_PARM_BLK_CCW_LEN;
@@ -1498,7 +1498,7 @@ static int __init dump_fcp_init(void)
 		return -ENOMEM;
 	rc = sysfs_create_group(&dump_kset->kobj, &dump_fcp_attr_group);
 	if (rc) {
-		free_page((unsigned long)dump_block_fcp);
+		free_page(dump_block_fcp);
 		return rc;
 	}
 	dump_block_fcp->hdr.len = IPL_PARM_BLK_FCP_LEN;
diff --git a/arch/s390/kernel/kprobes.c b/arch/s390/kernel/kprobes.c
index 389db56..2021dc0 100644
--- a/arch/s390/kernel/kprobes.c
+++ b/arch/s390/kernel/kprobes.c
@@ -48,7 +48,7 @@ static void *alloc_dmainsn_page(void)
 
 static void free_dmainsn_page(void *page)
 {
-	free_page((unsigned long)page);
+	free_page(page);
 }
 
 struct kprobe_insn_cache kprobe_dmainsn_slots = {
diff --git a/arch/s390/kernel/perf_cpum_sf.c b/arch/s390/kernel/perf_cpum_sf.c
index 3d8da1e..0dca133 100644
--- a/arch/s390/kernel/perf_cpum_sf.c
+++ b/arch/s390/kernel/perf_cpum_sf.c
@@ -132,7 +132,7 @@ static void free_sampling_buffer(struct sf_buffer *sfb)
 		if (is_link_entry(curr)) {
 			curr = get_next_sdbt(curr);
 			if (sdbt)
-				free_page((unsigned long) sdbt);
+				free_page(sdbt);
 
 			/* If the origin is reached, sampling buffer is freed */
 			if (curr == sfb->sdbt)
@@ -142,7 +142,7 @@ static void free_sampling_buffer(struct sf_buffer *sfb)
 		} else {
 			/* Process SDB pointer */
 			if (*curr) {
-				free_page(*curr);
+				free_page((void *)*curr);
 				curr++;
 			}
 		}
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index c837bca..2556124 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -807,7 +807,7 @@ static void __init setup_randomness(void)
 	vmms = (struct sysinfo_3_2_2 *) alloc_page(GFP_KERNEL);
 	if (vmms && stsi(vmms, 3, 2, 2) == 0 && vmms->count)
 		add_device_randomness(&vmms, vmms->count);
-	free_page((unsigned long) vmms);
+	free_page(vmms);
 }
 
 /*
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 9062df5..216c8f5 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -210,7 +210,7 @@ static int pcpu_alloc_lowcore(struct pcpu *pcpu, int cpu)
 	return 0;
 out:
 	if (pcpu != &pcpu_devices[0]) {
-		free_page(panic_stack);
+		free_page((void *)panic_stack);
 		free_pages(async_stack, ASYNC_ORDER);
 		free_pages((unsigned long) pcpu->lowcore, LC_ORDER);
 	}
@@ -226,7 +226,7 @@ static void pcpu_free_lowcore(struct pcpu *pcpu)
 	vdso_free_per_cpu(pcpu->lowcore);
 	if (pcpu == &pcpu_devices[0])
 		return;
-	free_page(pcpu->lowcore->panic_stack-PANIC_FRAME_OFFSET);
+	free_page((void *)(pcpu->lowcore->panic_stack-PANIC_FRAME_OFFSET));
 	free_pages(pcpu->lowcore->async_stack-ASYNC_FRAME_OFFSET, ASYNC_ORDER);
 	free_pages((unsigned long) pcpu->lowcore, LC_ORDER);
 }
diff --git a/arch/s390/kernel/suspend.c b/arch/s390/kernel/suspend.c
index 39e2f41..8c23212 100644
--- a/arch/s390/kernel/suspend.c
+++ b/arch/s390/kernel/suspend.c
@@ -65,7 +65,7 @@ void page_key_free(void)
 	while (page_key_data) {
 		pkd = page_key_data;
 		page_key_data = pkd->next;
-		free_page((unsigned long) pkd);
+		free_page(pkd);
 	}
 }
 
diff --git a/arch/s390/kernel/sysinfo.c b/arch/s390/kernel/sysinfo.c
index 99babea..f6a4c52 100644
--- a/arch/s390/kernel/sysinfo.c
+++ b/arch/s390/kernel/sysinfo.c
@@ -271,7 +271,7 @@ static int sysinfo_show(struct seq_file *m, void *v)
 		stsi_2_2_2(m, info);
 	if (level >= 3)
 		stsi_3_2_2(m, info);
-	free_page((unsigned long)info);
+	free_page(info);
 	return 0;
 }
 
@@ -449,7 +449,7 @@ void s390_adjust_jiffies(void)
 		 */
 		capability = 42;
 	loops_per_jiffy = capability * (500000/HZ);
-	free_page((unsigned long) info);
+	free_page(info);
 }
 
 /*
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
index 99f84ac31..1ce2c3a 100644
--- a/arch/s390/kernel/time.c
+++ b/arch/s390/kernel/time.c
@@ -1466,7 +1466,7 @@ static void __init stp_reset(void)
 	else if (stp_online) {
 		pr_warning("The real or virtual hardware system does "
 			   "not provide an STP interface\n");
-		free_page((unsigned long) stp_page);
+		free_page(stp_page);
 		stp_page = NULL;
 		stp_online = 0;
 	}
diff --git a/arch/s390/kernel/vdso.c b/arch/s390/kernel/vdso.c
index 59eddb0..2391d83 100644
--- a/arch/s390/kernel/vdso.c
+++ b/arch/s390/kernel/vdso.c
@@ -132,8 +132,8 @@ int vdso_alloc_per_cpu(struct _lowcore *lowcore)
 	return 0;
 
 out:
-	free_page(page_frame);
-	free_page(page_table);
+	free_page((void *)page_frame);
+	free_page((void *)page_table);
 	free_pages(segment_table, SEGMENT_ORDER);
 	return -ENOMEM;
 }
@@ -152,8 +152,8 @@ void vdso_free_per_cpu(struct _lowcore *lowcore)
 	page_table = *(unsigned long *) segment_table;
 	page_frame = *(unsigned long *) page_table;
 
-	free_page(page_frame);
-	free_page(page_table);
+	free_page((void *)page_frame);
+	free_page((void *)page_table);
 	free_pages(segment_table, SEGMENT_ORDER);
 }
 
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 8465892..940dd42 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -1175,9 +1175,9 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
 	return 0;
 out_err:
 	kfree(kvm->arch.crypto.crycb);
-	free_page((unsigned long)kvm->arch.model.fac);
+	free_page(kvm->arch.model.fac);
 	debug_unregister(kvm->arch.dbf);
-	free_page((unsigned long)(kvm->arch.sca));
+	free_page(kvm->arch.sca);
 	KVM_EVENT(3, "creation of vm failed: %d", rc);
 	return rc;
 }
@@ -1202,7 +1202,7 @@ void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
 
 	if (vcpu->kvm->arch.use_cmma)
 		kvm_s390_vcpu_unsetup_cmma(vcpu);
-	free_page((unsigned long)(vcpu->arch.sie_block));
+	free_page(vcpu->arch.sie_block);
 
 	kvm_vcpu_uninit(vcpu);
 	kmem_cache_free(kvm_vcpu_cache, vcpu);
@@ -1227,8 +1227,8 @@ static void kvm_free_vcpus(struct kvm *kvm)
 void kvm_arch_destroy_vm(struct kvm *kvm)
 {
 	kvm_free_vcpus(kvm);
-	free_page((unsigned long)kvm->arch.model.fac);
-	free_page((unsigned long)(kvm->arch.sca));
+	free_page(kvm->arch.model.fac);
+	free_page(kvm->arch.sca);
 	debug_unregister(kvm->arch.dbf);
 	kfree(kvm->arch.crypto.crycb);
 	if (!kvm_is_ucontrol(kvm))
@@ -1390,7 +1390,7 @@ static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu)
 
 void kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu *vcpu)
 {
-	free_page(vcpu->arch.sie_block->cbrlo);
+	free_page((void *)vcpu->arch.sie_block->cbrlo);
 	vcpu->arch.sie_block->cbrlo = 0;
 }
 
@@ -1523,7 +1523,7 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
 
 	return vcpu;
 out_free_sie_block:
-	free_page((unsigned long)(vcpu->arch.sie_block));
+	free_page(vcpu->arch.sie_block);
 out_free_cpu:
 	kmem_cache_free(kvm_vcpu_cache, vcpu);
 out:
diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c
index d76b51c..9ed1a25 100644
--- a/arch/s390/kvm/priv.c
+++ b/arch/s390/kvm/priv.c
@@ -564,14 +564,14 @@ static int handle_stsi(struct kvm_vcpu *vcpu)
 		rc = -EREMOTE;
 	}
 	trace_kvm_s390_handle_stsi(vcpu, fc, sel1, sel2, operand2);
-	free_page(mem);
+	free_page((void *)mem);
 	kvm_s390_set_psw_cc(vcpu, 0);
 	vcpu->run->s.regs.gprs[0] = 0;
 	return rc;
 out_no_data:
 	kvm_s390_set_psw_cc(vcpu, 3);
 out:
-	free_page(mem);
+	free_page((void *)mem);
 	return rc;
 }
 
diff --git a/arch/s390/mm/cmm.c b/arch/s390/mm/cmm.c
index 79ddd58..b0ca6af 100644
--- a/arch/s390/mm/cmm.c
+++ b/arch/s390/mm/cmm.c
@@ -78,7 +78,7 @@ static long cmm_alloc_pages(long nr, long *counter,
 			npa = (struct cmm_page_array *)
 				__get_free_page(GFP_NOIO);
 			if (!npa) {
-				free_page(addr);
+				free_page((void *)addr);
 				break;
 			}
 			spin_lock(&cmm_lock);
@@ -89,7 +89,7 @@ static long cmm_alloc_pages(long nr, long *counter,
 				pa = npa;
 				*list = pa;
 			} else
-				free_page((unsigned long) npa);
+				free_page(npa);
 		}
 		diag10_range(addr >> PAGE_SHIFT, 1);
 		pa->pages[pa->index++] = addr;
@@ -113,10 +113,10 @@ static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
 		addr = pa->pages[--pa->index];
 		if (pa->index == 0) {
 			pa = pa->next;
-			free_page((unsigned long) *list);
+			free_page(*list);
 			*list = pa;
 		}
-		free_page(addr);
+		free_page((void *)addr);
 		(*counter)--;
 		nr--;
 	}
diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c
index 8a993a5..e20811c 100644
--- a/arch/s390/mm/maccess.c
+++ b/arch/s390/mm/maccess.c
@@ -151,7 +151,7 @@ int copy_to_user_real(void __user *dest, void *src, unsigned long count)
 	}
 	rc = 0;
 out:
-	free_page((unsigned long) buf);
+	free_page(buf);
 	return rc;
 }
 
@@ -204,5 +204,5 @@ void *xlate_dev_mem_ptr(phys_addr_t addr)
 void unxlate_dev_mem_ptr(phys_addr_t addr, void *buf)
 {
 	if ((void *) addr != buf)
-		free_page((unsigned long) buf);
+		free_page(buf);
 }
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c
index 54ef3bc..676989b 100644
--- a/arch/s390/mm/pgtable.c
+++ b/arch/s390/mm/pgtable.c
@@ -1094,7 +1094,7 @@ static void tlb_remove_table_rcu(struct rcu_head *head)
 	for (i = 0; i < batch->nr; i++)
 		__tlb_remove_table(batch->tables[i]);
 
-	free_page((unsigned long)batch);
+	free_page(batch);
 }
 
 void tlb_table_flush(struct mmu_gather *tlb)
diff --git a/arch/s390/oprofile/hwsampler.c b/arch/s390/oprofile/hwsampler.c
index ff9b4eb..62f6aa2 100644
--- a/arch/s390/oprofile/hwsampler.c
+++ b/arch/s390/oprofile/hwsampler.c
@@ -264,7 +264,7 @@ static int allocate_sdbt(int cpu)
 		barrier();
 		if (oom_killer_was_active || !sdbt) {
 			if (sdbt)
-				free_page((unsigned long)sdbt);
+				free_page(sdbt);
 
 			goto allocate_sdbt_error;
 		}
@@ -286,7 +286,7 @@ static int allocate_sdbt(int cpu)
 			barrier();
 			if (oom_killer_was_active || !sdb) {
 				if (sdb)
-					free_page(sdb);
+					free_page((void *)sdb);
 
 				goto allocate_sdbt_error;
 			}
@@ -353,7 +353,7 @@ static int deallocate_sdbt(void)
 			if (is_link_entry(curr)) {
 				curr = get_next_sdbt(curr);
 				if (sdbt)
-					free_page(sdbt);
+					free_page((void *)sdbt);
 
 				/* we are done if we reach the start */
 				if ((unsigned long) curr == start)
@@ -363,7 +363,7 @@ static int deallocate_sdbt(void)
 			} else {
 				/* process SDB pointer */
 				if (*curr) {
-					free_page(*curr);
+					free_page((void *)*curr);
 					curr++;
 				}
 			}
diff --git a/arch/sh/boards/mach-hp6xx/pm.c b/arch/sh/boards/mach-hp6xx/pm.c
index 8b50cf7..83b3302 100644
--- a/arch/sh/boards/mach-hp6xx/pm.c
+++ b/arch/sh/boards/mach-hp6xx/pm.c
@@ -81,7 +81,7 @@ static void pm_enter(void)
 
 	asm volatile("ldc %0, vbr" : : "r" (vbr_old));
 
-	free_page(vbr_new);
+	free_page((void *)vbr_new);
 
 	/* enable PLL1 */
 	frqcr = __raw_readw(FRQCR);
diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c
index 3768682..7db91e1 100644
--- a/arch/sparc/kernel/iommu.c
+++ b/arch/sparc/kernel/iommu.c
@@ -143,7 +143,7 @@ int iommu_table_init(struct iommu *iommu, int tsbsize,
 	return 0;
 
 out_free_dummy_page:
-	free_page(iommu->dummy_page);
+	free_page((void *)iommu->dummy_page);
 	iommu->dummy_page = 0UL;
 
 out_free_map:
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index 3025bd5..6ef89c0 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -2738,7 +2738,7 @@ pgtable_t pte_alloc_one(struct mm_struct *mm,
 
 void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static void __pte_free(pgtable_t pte)
diff --git a/arch/tile/mm/elf.c b/arch/tile/mm/elf.c
index 6225cc9..cbc81ab 100644
--- a/arch/tile/mm/elf.c
+++ b/arch/tile/mm/elf.c
@@ -97,7 +97,7 @@ static int notify_exec(struct mm_struct *mm)
 done_put:
 	fput(exe_file);
 done_free:
-	free_page((unsigned long)buf);
+	free_page(buf);
 	return ret;
 }
 
diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c
index 29880c9..5992763 100644
--- a/arch/um/drivers/mconsole_kern.c
+++ b/arch/um/drivers/mconsole_kern.c
@@ -334,7 +334,7 @@ static int mem_config(char *str, char **error_out)
 				unplug_index = UNPLUGGED_PER_PAGE;
 			}
 
-			free_page((unsigned long) addr);
+			free_page(addr);
 			unplugged_pages_count--;
 		}
 		else {
diff --git a/arch/um/include/asm/pgalloc.h b/arch/um/include/asm/pgalloc.h
index bf90b2a..35acfd4 100644
--- a/arch/um/include/asm/pgalloc.h
+++ b/arch/um/include/asm/pgalloc.h
@@ -30,7 +30,7 @@ extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long);
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long) pte);
+	free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
@@ -49,7 +49,7 @@ do {							\
 
 static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
 {
-	free_page((unsigned long)pmd);
+	free_page(pmd);
 }
 
 #define __pmd_free_tlb(tlb,x, address)   tlb_remove_page((tlb),virt_to_page(x))
diff --git a/arch/um/kernel/mem.c b/arch/um/kernel/mem.c
index b2a2dff..8936388 100644
--- a/arch/um/kernel/mem.c
+++ b/arch/um/kernel/mem.c
@@ -197,7 +197,7 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
 
 void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-	free_page((unsigned long) pgd);
+	free_page(pgd);
 }
 
 pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c
index 9591a66..ef2762b 100644
--- a/arch/um/kernel/skas/mmu.c
+++ b/arch/um/kernel/skas/mmu.c
@@ -85,7 +85,7 @@ int init_new_context(struct task_struct *task, struct mm_struct *mm)
 
  out_free:
 	if (to_mm->id.stack != 0)
-		free_page(to_mm->id.stack);
+		free_page((void *)to_mm->id.stack);
  out:
 	return ret;
 }
@@ -153,6 +153,6 @@ void destroy_context(struct mm_struct *mm)
 	}
 	os_kill_ptraced_process(mmu->id.u.pid, 1);
 
-	free_page(mmu->id.stack);
+	free_page((void *)mmu->id.stack);
 	free_ldt(mmu);
 }
diff --git a/arch/unicore32/include/asm/pgalloc.h b/arch/unicore32/include/asm/pgalloc.h
index 2e02d13..3287878 100644
--- a/arch/unicore32/include/asm/pgalloc.h
+++ b/arch/unicore32/include/asm/pgalloc.h
@@ -70,7 +70,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long addr)
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
 	if (pte)
-		free_page((unsigned long)pte);
+		free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
diff --git a/arch/x86/include/asm/pgalloc.h b/arch/x86/include/asm/pgalloc.h
index bf7f8b5..061eb29 100644
--- a/arch/x86/include/asm/pgalloc.h
+++ b/arch/x86/include/asm/pgalloc.h
@@ -42,7 +42,7 @@ extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long);
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
 	BUG_ON((unsigned long)pte & (PAGE_SIZE-1));
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, struct page *pte)
@@ -95,7 +95,7 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
 {
 	BUG_ON((unsigned long)pmd & (PAGE_SIZE-1));
 	pgtable_pmd_page_dtor(virt_to_page(pmd));
-	free_page((unsigned long)pmd);
+	free_page(pmd);
 }
 
 extern void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd);
@@ -131,7 +131,7 @@ static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
 static inline void pud_free(struct mm_struct *mm, pud_t *pud)
 {
 	BUG_ON((unsigned long)pud & (PAGE_SIZE-1));
-	free_page((unsigned long)pud);
+	free_page(pud);
 }
 
 extern void ___pud_free_tlb(struct mmu_gather *tlb, pud_t *pud);
diff --git a/arch/x86/kernel/cpu/perf_event_intel_pt.c b/arch/x86/kernel/cpu/perf_event_intel_pt.c
index 868e119..79b7a3c 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_pt.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_pt.c
@@ -373,7 +373,7 @@ static struct topa *topa_alloc(int cpu, gfp_t gfp)
  */
 static void topa_free(struct topa *topa)
 {
-	free_page((unsigned long)topa);
+	free_page(topa);
 }
 
 /**
diff --git a/arch/x86/kernel/ldt.c b/arch/x86/kernel/ldt.c
index 6acc9dd..5208c58 100644
--- a/arch/x86/kernel/ldt.c
+++ b/arch/x86/kernel/ldt.c
@@ -95,7 +95,7 @@ static void free_ldt_struct(struct ldt_struct *ldt)
 	if (ldt->size * LDT_ENTRY_SIZE > PAGE_SIZE)
 		vfree(ldt->entries);
 	else
-		free_page((unsigned long)ldt->entries);
+		free_page(ldt->entries);
 	kfree(ldt);
 }
 
diff --git a/arch/x86/kernel/machine_kexec_32.c b/arch/x86/kernel/machine_kexec_32.c
index 469b23d..7c820f91 100644
--- a/arch/x86/kernel/machine_kexec_32.c
+++ b/arch/x86/kernel/machine_kexec_32.c
@@ -70,13 +70,13 @@ static void load_segments(void)
 
 static void machine_kexec_free_page_tables(struct kimage *image)
 {
-	free_page((unsigned long)image->arch.pgd);
+	free_page(image->arch.pgd);
 #ifdef CONFIG_X86_PAE
-	free_page((unsigned long)image->arch.pmd0);
-	free_page((unsigned long)image->arch.pmd1);
+	free_page(image->arch.pmd0);
+	free_page(image->arch.pmd1);
 #endif
-	free_page((unsigned long)image->arch.pte0);
-	free_page((unsigned long)image->arch.pte1);
+	free_page(image->arch.pte0);
+	free_page(image->arch.pte1);
 }
 
 static int machine_kexec_alloc_page_tables(struct kimage *image)
diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c
index 819ab3f..1809987 100644
--- a/arch/x86/kernel/machine_kexec_64.c
+++ b/arch/x86/kernel/machine_kexec_64.c
@@ -36,9 +36,9 @@ static struct kexec_file_ops *kexec_file_loaders[] = {
 
 static void free_transition_pgtable(struct kimage *image)
 {
-	free_page((unsigned long)image->arch.pud);
-	free_page((unsigned long)image->arch.pmd);
-	free_page((unsigned long)image->arch.pte);
+	free_page(image->arch.pud);
+	free_page(image->arch.pmd);
+	free_page(image->arch.pte);
 }
 
 static int init_transition_pgtable(struct kimage *image, pgd_t *pgd)
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
index 4d30b86..406e746 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -1551,7 +1551,7 @@ void kvm_free_lapic(struct kvm_vcpu *vcpu)
 		static_key_slow_dec_deferred(&apic_sw_disabled);
 
 	if (apic->regs)
-		free_page((unsigned long)apic->regs);
+		free_page(apic->regs);
 
 	kfree(apic);
 }
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index e7c2c14..fb86efb 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -703,7 +703,7 @@ static int mmu_topup_memory_cache_page(struct kvm_mmu_memory_cache *cache,
 static void mmu_free_memory_cache_page(struct kvm_mmu_memory_cache *mc)
 {
 	while (mc->nobjs)
-		free_page((unsigned long)mc->objects[--mc->nobjs]);
+		free_page(mc->objects[--mc->nobjs]);
 }
 
 static int mmu_topup_memory_caches(struct kvm_vcpu *vcpu)
@@ -1687,9 +1687,9 @@ static void kvm_mmu_free_page(struct kvm_mmu_page *sp)
 	MMU_WARN_ON(!is_empty_shadow_page(sp->spt));
 	hlist_del(&sp->hash_link);
 	list_del(&sp->link);
-	free_page((unsigned long)sp->spt);
+	free_page(sp->spt);
 	if (!sp->role.direct)
-		free_page((unsigned long)sp->gfns);
+		free_page(sp->gfns);
 	kmem_cache_free(mmu_page_header_cache, sp);
 }
 
@@ -4451,9 +4451,9 @@ EXPORT_SYMBOL_GPL(kvm_disable_tdp);
 
 static void free_mmu_pages(struct kvm_vcpu *vcpu)
 {
-	free_page((unsigned long)vcpu->arch.mmu.pae_root);
+	free_page(vcpu->arch.mmu.pae_root);
 	if (vcpu->arch.mmu.lm_root != NULL)
-		free_page((unsigned long)vcpu->arch.mmu.lm_root);
+		free_page(vcpu->arch.mmu.lm_root);
 }
 
 static int alloc_mmu_pages(struct kvm_vcpu *vcpu)
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index af823a3..f70ed2f 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -6276,40 +6276,40 @@ static __init int hardware_setup(void)
 	return alloc_kvm_area();
 
 out8:
-	free_page((unsigned long)vmx_vmwrite_bitmap);
+	free_page(vmx_vmwrite_bitmap);
 out7:
-	free_page((unsigned long)vmx_vmread_bitmap);
+	free_page(vmx_vmread_bitmap);
 out6:
 	if (nested)
-		free_page((unsigned long)vmx_msr_bitmap_nested);
+		free_page(vmx_msr_bitmap_nested);
 out5:
-	free_page((unsigned long)vmx_msr_bitmap_longmode_x2apic);
+	free_page(vmx_msr_bitmap_longmode_x2apic);
 out4:
-	free_page((unsigned long)vmx_msr_bitmap_longmode);
+	free_page(vmx_msr_bitmap_longmode);
 out3:
-	free_page((unsigned long)vmx_msr_bitmap_legacy_x2apic);
+	free_page(vmx_msr_bitmap_legacy_x2apic);
 out2:
-	free_page((unsigned long)vmx_msr_bitmap_legacy);
+	free_page(vmx_msr_bitmap_legacy);
 out1:
-	free_page((unsigned long)vmx_io_bitmap_b);
+	free_page(vmx_io_bitmap_b);
 out:
-	free_page((unsigned long)vmx_io_bitmap_a);
+	free_page(vmx_io_bitmap_a);
 
     return r;
 }
 
 static __exit void hardware_unsetup(void)
 {
-	free_page((unsigned long)vmx_msr_bitmap_legacy_x2apic);
-	free_page((unsigned long)vmx_msr_bitmap_longmode_x2apic);
-	free_page((unsigned long)vmx_msr_bitmap_legacy);
-	free_page((unsigned long)vmx_msr_bitmap_longmode);
-	free_page((unsigned long)vmx_io_bitmap_b);
-	free_page((unsigned long)vmx_io_bitmap_a);
-	free_page((unsigned long)vmx_vmwrite_bitmap);
-	free_page((unsigned long)vmx_vmread_bitmap);
+	free_page(vmx_msr_bitmap_legacy_x2apic);
+	free_page(vmx_msr_bitmap_longmode_x2apic);
+	free_page(vmx_msr_bitmap_legacy);
+	free_page(vmx_msr_bitmap_longmode);
+	free_page(vmx_io_bitmap_b);
+	free_page(vmx_io_bitmap_a);
+	free_page(vmx_vmwrite_bitmap);
+	free_page(vmx_vmread_bitmap);
 	if (nested)
-		free_page((unsigned long)vmx_msr_bitmap_nested);
+		free_page(vmx_msr_bitmap_nested);
 
 	free_kvm_area();
 }
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index eed3228..6b5980f 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -7589,7 +7589,7 @@ fail_free_lapic:
 fail_mmu_destroy:
 	kvm_mmu_destroy(vcpu);
 fail_free_pio_data:
-	free_page((unsigned long)vcpu->arch.pio_data);
+	free_page(vcpu->arch.pio_data);
 fail:
 	return r;
 }
@@ -7604,7 +7604,7 @@ void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
 	idx = srcu_read_lock(&vcpu->kvm->srcu);
 	kvm_mmu_destroy(vcpu);
 	srcu_read_unlock(&vcpu->kvm->srcu, idx);
-	free_page((unsigned long)vcpu->arch.pio_data);
+	free_page(vcpu->arch.pio_data);
 	if (!lapic_in_kernel(vcpu))
 		static_key_slow_dec(&kvm_no_apic_vcpu);
 }
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index a3137a4..5aa4ca6 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -725,7 +725,7 @@ static bool try_to_free_pte_page(pte_t *pte)
 		if (!pte_none(pte[i]))
 			return false;
 
-	free_page((unsigned long)pte);
+	free_page(pte);
 	return true;
 }
 
@@ -737,7 +737,7 @@ static bool try_to_free_pmd_page(pmd_t *pmd)
 		if (!pmd_none(pmd[i]))
 			return false;
 
-	free_page((unsigned long)pmd);
+	free_page(pmd);
 	return true;
 }
 
@@ -749,7 +749,7 @@ static bool try_to_free_pud_page(pud_t *pud)
 		if (!pud_none(pud[i]))
 			return false;
 
-	free_page((unsigned long)pud);
+	free_page(pud);
 	return true;
 }
 
diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
index fb0a9dd..8e51a6c 100644
--- a/arch/x86/mm/pgtable.c
+++ b/arch/x86/mm/pgtable.c
@@ -198,7 +198,7 @@ static void free_pmds(struct mm_struct *mm, pmd_t *pmds[])
 	for(i = 0; i < PREALLOCATED_PMDS; i++)
 		if (pmds[i]) {
 			pgtable_pmd_page_dtor(virt_to_page(pmds[i]));
-			free_page((unsigned long)pmds[i]);
+			free_page(pmds[i]);
 			mm_dec_nr_pmds(mm);
 		}
 }
@@ -213,7 +213,7 @@ static int preallocate_pmds(struct mm_struct *mm, pmd_t *pmds[])
 		if (!pmd)
 			failed = true;
 		if (pmd && !pgtable_pmd_page_ctor(virt_to_page(pmd))) {
-			free_page((unsigned long)pmd);
+			free_page(pmd);
 			pmd = NULL;
 			failed = true;
 		}
@@ -335,7 +335,7 @@ static inline pgd_t *_pgd_alloc(void)
 static inline void _pgd_free(pgd_t *pgd)
 {
 	if (!SHARED_KERNEL_PMD)
-		free_page((unsigned long)pgd);
+		free_page(pgd);
 	else
 		kmem_cache_free(pgd_cache, pgd);
 }
@@ -347,7 +347,7 @@ static inline pgd_t *_pgd_alloc(void)
 
 static inline void _pgd_free(pgd_t *pgd)
 {
-	free_page((unsigned long)pgd);
+	free_page(pgd);
 }
 #endif /* CONFIG_X86_PAE */
 
diff --git a/arch/x86/pci/pcbios.c b/arch/x86/pci/pcbios.c
index 9b83b90..7958c26 100644
--- a/arch/x86/pci/pcbios.c
+++ b/arch/x86/pci/pcbios.c
@@ -423,7 +423,7 @@ struct irq_routing_table * pcibios_get_irq_routing_table(void)
 			printk(KERN_INFO "PCI: Using BIOS Interrupt Routing Table\n");
 		}
 	}
-	free_page(page);
+	free_page((void *)page);
 	return rt;
 }
 EXPORT_SYMBOL(pcibios_get_irq_routing_table);
diff --git a/arch/x86/um/ldt.c b/arch/x86/um/ldt.c
index 836a1eb..42522ff 100644
--- a/arch/x86/um/ldt.c
+++ b/arch/x86/um/ldt.c
@@ -364,7 +364,7 @@ void free_ldt(struct mm_context *mm)
 	if (mm->arch.ldt.entry_count > LDT_DIRECT_ENTRIES) {
 		i = mm->arch.ldt.entry_count / LDT_ENTRIES_PER_PAGE;
 		while (i-- > 0)
-			free_page((long) mm->arch.ldt.u.pages[i]);
+			free_page(mm->arch.ldt.u.pages[i]);
 	}
 	mm->arch.ldt.entry_count = 0;
 }
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index ac161db..bb7b2e5 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1547,7 +1547,7 @@ static void xen_pgd_free(struct mm_struct *mm, pgd_t *pgd)
 	pgd_t *user_pgd = xen_get_user_pgd(pgd);
 
 	if (user_pgd)
-		free_page((unsigned long)user_pgd);
+		free_page(user_pgd);
 #endif
 }
 
diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
index cab9f76..b72eab3 100644
--- a/arch/x86/xen/p2m.c
+++ b/arch/x86/xen/p2m.c
@@ -192,7 +192,7 @@ static void __ref free_p2m_page(void *p)
 		return;
 	}
 
-	free_page((unsigned long)p);
+	free_page(p);
 }
 
 /*
diff --git a/arch/xtensa/include/asm/pgalloc.h b/arch/xtensa/include/asm/pgalloc.h
index d38eb92..022b9b3 100644
--- a/arch/xtensa/include/asm/pgalloc.h
+++ b/arch/xtensa/include/asm/pgalloc.h
@@ -35,7 +35,7 @@ pgd_alloc(struct mm_struct *mm)
 
 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-	free_page((unsigned long)pgd);
+	free_page(pgd);
 }
 
 static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
@@ -71,7 +71,7 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_page((unsigned long)pte);
+	free_page(pte);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
diff --git a/block/partitions/check.c b/block/partitions/check.c
index 16118d1..dc43d02b 100644
--- a/block/partitions/check.c
+++ b/block/partitions/check.c
@@ -176,7 +176,7 @@ check_partition(struct gendisk *hd, struct block_device *bdev)
 	if (res > 0) {
 		printk(KERN_INFO "%s", state->pp_buf);
 
-		free_page((unsigned long)state->pp_buf);
+		free_page(state->pp_buf);
 		return state;
 	}
 	if (state->access_beyond_eod)
@@ -191,7 +191,7 @@ check_partition(struct gendisk *hd, struct block_device *bdev)
 		printk(KERN_INFO "%s", state->pp_buf);
 	}
 
-	free_page((unsigned long)state->pp_buf);
+	free_page(state->pp_buf);
 	free_partitions(state);
 	return ERR_PTR(res);
 }
diff --git a/crypto/blkcipher.c b/crypto/blkcipher.c
index 8cc1622..d46ebfa 100644
--- a/crypto/blkcipher.c
+++ b/crypto/blkcipher.c
@@ -138,7 +138,7 @@ err:
 	if (walk->buffer != walk->page)
 		kfree(walk->buffer);
 	if (walk->page)
-		free_page((unsigned long)walk->page);
+		free_page(walk->page);
 
 	return err;
 }
diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c
index 46a4a75..5cc0a85 100644
--- a/crypto/tcrypt.c
+++ b/crypto/tcrypt.c
@@ -264,7 +264,7 @@ static int testmgr_alloc_buf(char *buf[XBUFSIZE])
 
 err_free_buf:
 	while (i-- > 0)
-		free_page((unsigned long)buf[i]);
+		free_page(buf[i]);
 
 	return -ENOMEM;
 }
@@ -274,7 +274,7 @@ static void testmgr_free_buf(char *buf[XBUFSIZE])
 	int i;
 
 	for (i = 0; i < XBUFSIZE; i++)
-		free_page((unsigned long)buf[i]);
+		free_page(buf[i]);
 }
 
 static void sg_init_aead(struct scatterlist *sg, char *xbuf[XBUFSIZE],
@@ -2228,7 +2228,7 @@ static int __init tcrypt_mod_init(void)
 
 err_free_tv:
 	for (i = 0; i < TVMEMSIZE && tvmem[i]; i++)
-		free_page((unsigned long)tvmem[i]);
+		free_page(tvmem[i]);
 
 	return err;
 }
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index ae8c57fd..dc8d8f7 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -175,7 +175,7 @@ static int testmgr_alloc_buf(char *buf[XBUFSIZE])
 
 err_free_buf:
 	while (i-- > 0)
-		free_page((unsigned long)buf[i]);
+		free_page(buf[i]);
 
 	return -ENOMEM;
 }
@@ -185,7 +185,7 @@ static void testmgr_free_buf(char *buf[XBUFSIZE])
 	int i;
 
 	for (i = 0; i < XBUFSIZE; i++)
-		free_page((unsigned long)buf[i]);
+		free_page(buf[i]);
 }
 
 static int wait_async_op(struct tcrypt_result *tr, int ret)
diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
index 3dd9c46..1d074de 100644
--- a/drivers/acpi/apei/ghes.c
+++ b/drivers/acpi/apei/ghes.c
@@ -202,7 +202,7 @@ static void ghes_estatus_pool_free_chunk_page(struct gen_pool *pool,
 					      struct gen_pool_chunk *chunk,
 					      void *data)
 {
-	free_page(chunk->start_addr);
+	free_page((void *)chunk->start_addr);
 }
 
 static void ghes_estatus_pool_exit(void)
diff --git a/drivers/acpi/nvs.c b/drivers/acpi/nvs.c
index 85287b8..36bf798 100644
--- a/drivers/acpi/nvs.c
+++ b/drivers/acpi/nvs.c
@@ -132,7 +132,7 @@ void suspend_nvs_free(void)
 
 	list_for_each_entry(entry, &nvs_list, node)
 		if (entry->data) {
-			free_page((unsigned long)entry->data);
+			free_page(entry->data);
 			entry->data = NULL;
 			if (entry->kaddr) {
 				if (entry->unmap) {
diff --git a/drivers/atm/eni.c b/drivers/atm/eni.c
index 6339efd..20420c3 100644
--- a/drivers/atm/eni.c
+++ b/drivers/atm/eni.c
@@ -909,7 +909,7 @@ static int start_rx(struct atm_dev *dev)
 	if (!eni_dev->rx_map) {
 		printk(KERN_ERR DEV_LABEL "(itf %d): couldn't get free page\n",
 		    dev->number);
-		free_page((unsigned long) eni_dev->free_list);
+		free_page(eni_dev->free_list);
 		return -ENOMEM;
 	}
 	eni_dev->rx_mult = DEFAULT_RX_MULT;
diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c
index ce43ae3..cf0a9f5 100644
--- a/drivers/atm/lanai.c
+++ b/drivers/atm/lanai.c
@@ -1459,7 +1459,7 @@ static int vcc_table_allocate(struct lanai_dev *lanai)
 static inline void vcc_table_deallocate(const struct lanai_dev *lanai)
 {
 #ifdef VCCTABLE_GETFREEPAGE
-	free_page((unsigned long) lanai->vccs);
+	free_page(lanai->vccs);
 #else
 	vfree(lanai->vccs);
 #endif
diff --git a/drivers/auxdisplay/cfag12864b.c b/drivers/auxdisplay/cfag12864b.c
index 41ce4bd..412c1bf 100644
--- a/drivers/auxdisplay/cfag12864b.c
+++ b/drivers/auxdisplay/cfag12864b.c
@@ -371,7 +371,7 @@ cachealloced:
 	kfree(cfag12864b_cache);
 
 bufferalloced:
-	free_page((unsigned long) cfag12864b_buffer);
+	free_page(cfag12864b_buffer);
 
 none:
 	return ret;
@@ -383,7 +383,7 @@ static void __exit cfag12864b_exit(void)
 	cfag12864b_off();
 	destroy_workqueue(cfag12864b_workqueue);
 	kfree(cfag12864b_cache);
-	free_page((unsigned long) cfag12864b_buffer);
+	free_page(cfag12864b_buffer);
 }
 
 module_init(cfag12864b_init);
diff --git a/drivers/block/aoe/aoecmd.c b/drivers/block/aoe/aoecmd.c
index ad80c85..544612b 100644
--- a/drivers/block/aoe/aoecmd.c
+++ b/drivers/block/aoe/aoecmd.c
@@ -1821,6 +1821,6 @@ aoecmd_exit(void)
 	kfree(kts);
 	kfree(ktiowq);
 
-	free_page((unsigned long) page_address(empty_page));
+	free_page(page_address(empty_page));
 	empty_page = NULL;
 }
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index 0422c47..a055899 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -538,7 +538,7 @@ cciss_proc_write(struct file *file, const char __user *buf,
 	   safely possible. (only 1 module use count, lock issues.) */
 
 out:
-	free_page((unsigned long)buffer);
+	free_page(buffer);
 	return err;
 }
 
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index 74d97f4..c5f9c21 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -2498,8 +2498,8 @@ static int drbd_alloc_socket(struct drbd_socket *socket)
 
 static void drbd_free_socket(struct drbd_socket *socket)
 {
-	free_page((unsigned long) socket->sbuf);
-	free_page((unsigned long) socket->rbuf);
+	free_page(socket->sbuf);
+	free_page(socket->rbuf);
 }
 
 void conn_free_crypto(struct drbd_connection *connection)
diff --git a/drivers/char/agp/amd-k7-agp.c b/drivers/char/agp/amd-k7-agp.c
index 3661a51..3835c1b 100644
--- a/drivers/char/agp/amd-k7-agp.c
+++ b/drivers/char/agp/amd-k7-agp.c
@@ -55,7 +55,7 @@ static int amd_create_page_map(struct amd_page_map *page_map)
 static void amd_free_page_map(struct amd_page_map *page_map)
 {
 	set_memory_wb((unsigned long)page_map->real, 1);
-	free_page((unsigned long) page_map->real);
+	free_page(page_map->real);
 }
 
 static void amd_free_gatt_pages(void)
diff --git a/drivers/char/agp/ati-agp.c b/drivers/char/agp/ati-agp.c
index 75a9786..95651e2 100644
--- a/drivers/char/agp/ati-agp.c
+++ b/drivers/char/agp/ati-agp.c
@@ -77,7 +77,7 @@ static void ati_free_page_map(struct ati_page_map *page_map)
 {
 	unmap_page_from_agp(virt_to_page(page_map->real));
 	set_memory_wb((unsigned long)page_map->real, 1);
-	free_page((unsigned long) page_map->real);
+	free_page(page_map->real);
 }
 
 
diff --git a/drivers/char/agp/efficeon-agp.c b/drivers/char/agp/efficeon-agp.c
index 533cb6d..1416595 100644
--- a/drivers/char/agp/efficeon-agp.c
+++ b/drivers/char/agp/efficeon-agp.c
@@ -164,7 +164,7 @@ static int efficeon_free_gatt_table(struct agp_bridge_data *bridge)
 		if (page) {
 			efficeon_private.l1_table[index] = 0;
 			ClearPageReserved(virt_to_page((char *)page));
-			free_page(page);
+			free_page((void *)page);
 			freed++;
 		}
 		printk(KERN_DEBUG PFX "efficeon_free_gatt_table(%p, %02x, %08x)\n",
diff --git a/drivers/char/agp/sworks-agp.c b/drivers/char/agp/sworks-agp.c
index 9b163b4..96d2e55 100644
--- a/drivers/char/agp/sworks-agp.c
+++ b/drivers/char/agp/sworks-agp.c
@@ -66,7 +66,7 @@ static int serverworks_create_page_map(struct serverworks_page_map *page_map)
 static void serverworks_free_page_map(struct serverworks_page_map *page_map)
 {
 	set_memory_wb((unsigned long)page_map->real, 1);
-	free_page((unsigned long) page_map->real);
+	free_page(page_map->real);
 }
 
 static void serverworks_free_gatt_pages(void)
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
index 6b1721f..63f7056 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -445,7 +445,7 @@ static ssize_t read_kmem(struct file *file, char __user *buf,
 			read += sz;
 			p += sz;
 		}
-		free_page((unsigned long)kbuf);
+		free_page(kbuf);
 	}
 	*ppos = p;
 	return read ? read : err;
@@ -546,7 +546,7 @@ static ssize_t write_kmem(struct file *file, const char __user *buf,
 			virtr += sz;
 			p += sz;
 		}
-		free_page((unsigned long)kbuf);
+		free_page(kbuf);
 	}
 
 	*ppos = p;
diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c
index 45df4bf..6b79755 100644
--- a/drivers/char/pcmcia/synclink_cs.c
+++ b/drivers/char/pcmcia/synclink_cs.c
@@ -1337,7 +1337,7 @@ static void shutdown(MGSLPC_INFO * info, struct tty_struct *tty)
 	del_timer_sync(&info->tx_timer);
 
 	if (info->tx_buf) {
-		free_page((unsigned long) info->tx_buf);
+		free_page(info->tx_buf);
 		info->tx_buf = NULL;
 	}
 
diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c
index 3e6a226..35cf117 100644
--- a/drivers/char/tpm/tpm_ibmvtpm.c
+++ b/drivers/char/tpm/tpm_ibmvtpm.c
@@ -288,7 +288,7 @@ static int tpm_ibmvtpm_remove(struct vio_dev *vdev)
 
 	dma_unmap_single(ibmvtpm->dev, ibmvtpm->crq_dma_handle,
 			 CRQ_RES_BUF_SIZE, DMA_BIDIRECTIONAL);
-	free_page((unsigned long)ibmvtpm->crq_queue.crq_addr);
+	free_page(ibmvtpm->crq_queue.crq_addr);
 
 	if (ibmvtpm->rtce_buf) {
 		dma_unmap_single(ibmvtpm->dev, ibmvtpm->rtce_dma_handle,
@@ -652,7 +652,7 @@ reg_crq_cleanup:
 cleanup:
 	if (ibmvtpm) {
 		if (crq_q->crq_addr)
-			free_page((unsigned long)crq_q->crq_addr);
+			free_page(crq_q->crq_addr);
 		kfree(ibmvtpm);
 	}
 
diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c
index 3111f27..4ac4830 100644
--- a/drivers/char/tpm/xen-tpmfront.c
+++ b/drivers/char/tpm/xen-tpmfront.c
@@ -275,7 +275,7 @@ static void ring_free(struct tpm_private *priv)
 		gnttab_end_foreign_access(priv->ring_ref, 0,
 				(unsigned long)priv->shr);
 	else
-		free_page((unsigned long)priv->shr);
+		free_page(priv->shr);
 
 	if (priv->chip && priv->chip->vendor.irq)
 		unbind_from_irqhandler(priv->chip->vendor.irq, priv);
diff --git a/drivers/char/xilinx_hwicap/xilinx_hwicap.c b/drivers/char/xilinx_hwicap/xilinx_hwicap.c
index c07dfe5..7b09193 100644
--- a/drivers/char/xilinx_hwicap/xilinx_hwicap.c
+++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.c
@@ -411,13 +411,13 @@ hwicap_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
 
 		/* If we didn't read correctly, then bail out. */
 		if (status) {
-			free_page((unsigned long)kbuf);
+			free_page(kbuf);
 			goto error;
 		}
 
 		/* If we fail to return the data to the user, then bail out. */
 		if (copy_to_user(buf, kbuf, bytes_to_read)) {
-			free_page((unsigned long)kbuf);
+			free_page(kbuf);
 			status = -EFAULT;
 			goto error;
 		}
@@ -425,7 +425,7 @@ hwicap_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
 		       kbuf,
 		       bytes_remaining);
 		drvdata->read_buffer_in_use = bytes_remaining;
-		free_page((unsigned long)kbuf);
+		free_page(kbuf);
 	}
 	status = bytes_to_read;
  error:
@@ -478,13 +478,13 @@ hwicap_write(struct file *file, const char __user *buf,
 			    (((char *)kbuf) + drvdata->write_buffer_in_use),
 			    buf + written,
 			    len - (drvdata->write_buffer_in_use))) {
-				free_page((unsigned long)kbuf);
+				free_page(kbuf);
 				status = -EFAULT;
 				goto error;
 			}
 		} else {
 			if (copy_from_user(kbuf, buf + written, len)) {
-				free_page((unsigned long)kbuf);
+				free_page(kbuf);
 				status = -EFAULT;
 				goto error;
 			}
@@ -494,7 +494,7 @@ hwicap_write(struct file *file, const char __user *buf,
 				kbuf, len >> 2);
 
 		if (status) {
-			free_page((unsigned long)kbuf);
+			free_page(kbuf);
 			status = -EFAULT;
 			goto error;
 		}
@@ -515,7 +515,7 @@ hwicap_write(struct file *file, const char __user *buf,
 		}
 	}
 
-	free_page((unsigned long)kbuf);
+	free_page(kbuf);
 	status = written;
  error:
 	mutex_unlock(&drvdata->sem);
diff --git a/drivers/crypto/atmel-aes.c b/drivers/crypto/atmel-aes.c
index fb16d81..bf75457 100644
--- a/drivers/crypto/atmel-aes.c
+++ b/drivers/crypto/atmel-aes.c
@@ -686,8 +686,8 @@ err_map_out:
 		DMA_TO_DEVICE);
 err_map_in:
 err_alloc:
-	free_page((unsigned long)dd->buf_out);
-	free_page((unsigned long)dd->buf_in);
+	free_page(dd->buf_out);
+	free_page(dd->buf_in);
 	if (err)
 		pr_err("error: %d\n", err);
 	return err;
@@ -699,8 +699,8 @@ static void atmel_aes_buff_cleanup(struct atmel_aes_dev *dd)
 			 DMA_FROM_DEVICE);
 	dma_unmap_single(dd->dev, dd->dma_addr_in, dd->buflen,
 		DMA_TO_DEVICE);
-	free_page((unsigned long)dd->buf_out);
-	free_page((unsigned long)dd->buf_in);
+	free_page(dd->buf_out);
+	free_page(dd->buf_in);
 }
 
 static int atmel_aes_crypt(struct ablkcipher_request *req, unsigned long mode)
diff --git a/drivers/crypto/atmel-tdes.c b/drivers/crypto/atmel-tdes.c
index 2c7a628..0219027e 100644
--- a/drivers/crypto/atmel-tdes.c
+++ b/drivers/crypto/atmel-tdes.c
@@ -381,8 +381,8 @@ err_map_out:
 		DMA_TO_DEVICE);
 err_map_in:
 err_alloc:
-	free_page((unsigned long)dd->buf_out);
-	free_page((unsigned long)dd->buf_in);
+	free_page(dd->buf_out);
+	free_page(dd->buf_in);
 	if (err)
 		pr_err("error: %d\n", err);
 	return err;
@@ -394,8 +394,8 @@ static void atmel_tdes_buff_cleanup(struct atmel_tdes_dev *dd)
 			 DMA_FROM_DEVICE);
 	dma_unmap_single(dd->dev, dd->dma_addr_in, dd->buflen,
 		DMA_TO_DEVICE);
-	free_page((unsigned long)dd->buf_out);
-	free_page((unsigned long)dd->buf_in);
+	free_page(dd->buf_out);
+	free_page(dd->buf_in);
 }
 
 static int atmel_tdes_crypt_pdc(struct crypto_tfm *tfm, dma_addr_t dma_addr_in,
diff --git a/drivers/crypto/nx/nx-842.c b/drivers/crypto/nx/nx-842.c
index 046c1c4..ce459cb 100644
--- a/drivers/crypto/nx/nx-842.c
+++ b/drivers/crypto/nx/nx-842.c
@@ -121,8 +121,8 @@ int nx842_crypto_init(struct crypto_tfm *tfm, struct nx842_driver *driver)
 	ctx->dbounce = (u8 *)__get_free_pages(GFP_KERNEL, BOUNCE_BUFFER_ORDER);
 	if (!ctx->wmem || !ctx->sbounce || !ctx->dbounce) {
 		kfree(ctx->wmem);
-		free_page((unsigned long)ctx->sbounce);
-		free_page((unsigned long)ctx->dbounce);
+		free_page(ctx->sbounce);
+		free_page(ctx->dbounce);
 		return -ENOMEM;
 	}
 
@@ -135,8 +135,8 @@ void nx842_crypto_exit(struct crypto_tfm *tfm)
 	struct nx842_crypto_ctx *ctx = crypto_tfm_ctx(tfm);
 
 	kfree(ctx->wmem);
-	free_page((unsigned long)ctx->sbounce);
-	free_page((unsigned long)ctx->dbounce);
+	free_page(ctx->sbounce);
+	free_page(ctx->dbounce);
 }
 EXPORT_SYMBOL_GPL(nx842_crypto_exit);
 
diff --git a/drivers/dma/nbpfaxi.c b/drivers/dma/nbpfaxi.c
index 2b5a198..3943f14 100644
--- a/drivers/dma/nbpfaxi.c
+++ b/drivers/dma/nbpfaxi.c
@@ -1065,7 +1065,7 @@ static void nbpf_free_chan_resources(struct dma_chan *dchan)
 		     i++, ldesc++)
 			dma_unmap_single(dchan->device->dev, ldesc->hwdesc_dma_addr,
 					 sizeof(*ldesc->hwdesc), DMA_TO_DEVICE);
-		free_page((unsigned long)dpage);
+		free_page(dpage);
 	}
 }
 
diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c
index 7820d07..f632f53 100644
--- a/drivers/dma/sh/rcar-dmac.c
+++ b/drivers/dma/sh/rcar-dmac.c
@@ -995,7 +995,7 @@ static void rcar_dmac_free_chan_resources(struct dma_chan *chan)
 
 	list_for_each_entry_safe(page, _page, &rchan->desc.pages, node) {
 		list_del(&page->node);
-		free_page((unsigned long)page);
+		free_page(page);
 	}
 
 	pm_runtime_put(chan->device->dev);
diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c
index 21a123c..9f5decc 100644
--- a/drivers/extcon/extcon.c
+++ b/drivers/extcon/extcon.c
@@ -316,7 +316,7 @@ int extcon_update_state(struct extcon_dev *edev, u32 mask, u32 state)
 			spin_unlock_irqrestore(&edev->lock, flags);
 
 			kobject_uevent_env(&edev->dev.kobj, KOBJ_CHANGE, envp);
-			free_page((unsigned long)prop_buf);
+			free_page(prop_buf);
 		} else {
 			/* Unlock early before uevent */
 			spin_unlock_irqrestore(&edev->lock, flags);
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index c2f5117..f7303dd 100644
--- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -3016,7 +3016,7 @@ static struct fw_iso_context *ohci_allocate_iso_context(struct fw_card *card,
 	return &ctx->base;
 
  out_with_header:
-	free_page((unsigned long)ctx->header);
+	free_page(ctx->header);
  out:
 	spin_lock_irq(&ohci->lock);
 
@@ -3120,7 +3120,7 @@ static void ohci_free_iso_context(struct fw_iso_context *base)
 
 	ohci_stop_iso(base);
 	context_release(&ctx->context);
-	free_page((unsigned long)ctx->header);
+	free_page(ctx->header);
 
 	spin_lock_irqsave(&ohci->lock, flags);
 
diff --git a/drivers/gpu/drm/via/via_dmablit.c b/drivers/gpu/drm/via/via_dmablit.c
index d0cbd5e..869282d 100644
--- a/drivers/gpu/drm/via/via_dmablit.c
+++ b/drivers/gpu/drm/via/via_dmablit.c
@@ -180,7 +180,7 @@ via_free_sg_info(struct pci_dev *pdev, drm_via_sg_info_t *vsg)
 	case dr_via_desc_pages_alloc:
 		for (i = 0; i < vsg->num_desc_pages; ++i) {
 			if (vsg->desc_pages[i] != NULL)
-				free_page((unsigned long)vsg->desc_pages[i]);
+				free_page(vsg->desc_pages[i]);
 		}
 		kfree(vsg->desc_pages);
 	case dr_via_pages_locked:
diff --git a/drivers/hsi/clients/cmt_speech.c b/drivers/hsi/clients/cmt_speech.c
index 95638df..7fa47a8 100644
--- a/drivers/hsi/clients/cmt_speech.c
+++ b/drivers/hsi/clients/cmt_speech.c
@@ -1321,7 +1321,7 @@ static int cs_char_open(struct inode *unused, struct file *file)
 	return 0;
 
 out3:
-	free_page(p);
+	free_page((void *)p);
 out2:
 	spin_lock_bh(&cs_char_data.lock);
 	cs_char_data.opened = 0;
@@ -1352,7 +1352,7 @@ static int cs_char_release(struct inode *unused, struct file *file)
 	cs_hsi_stop(csdata->hi);
 	spin_lock_bh(&csdata->lock);
 	csdata->hi = NULL;
-	free_page(csdata->mmap_base);
+	free_page((void *)csdata->mmap_base);
 	cs_free_char_queue(&csdata->chardev_queue);
 	cs_free_char_queue(&csdata->dataind_queue);
 	csdata->opened = 0;
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
index 6341be8..0d7ae9e 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -467,11 +467,11 @@ static void hv_synic_free_cpu(int cpu)
 	kfree(hv_context.event_dpc[cpu]);
 	kfree(hv_context.clk_evt[cpu]);
 	if (hv_context.synic_event_page[cpu])
-		free_page((unsigned long)hv_context.synic_event_page[cpu]);
+		free_page(hv_context.synic_event_page[cpu]);
 	if (hv_context.synic_message_page[cpu])
-		free_page((unsigned long)hv_context.synic_message_page[cpu]);
+		free_page(hv_context.synic_message_page[cpu]);
 	if (hv_context.post_msg_page[cpu])
-		free_page((unsigned long)hv_context.post_msg_page[cpu]);
+		free_page(hv_context.post_msg_page[cpu]);
 }
 
 void hv_synic_free(void)
diff --git a/drivers/ide/ide-proc.c b/drivers/ide/ide-proc.c
index 97c0700..0002937 100644
--- a/drivers/ide/ide-proc.c
+++ b/drivers/ide/ide-proc.c
@@ -354,7 +354,7 @@ static ssize_t ide_settings_proc_write(struct file *file, const char __user *buf
 		return -ENOMEM;
 
 	if (copy_from_user(buf, buffer, count)) {
-		free_page((unsigned long)buf);
+		free_page(buf);
 		return -EFAULT;
 	}
 
@@ -424,10 +424,10 @@ static ssize_t ide_settings_proc_write(struct file *file, const char __user *buf
 			mutex_unlock(&ide_setting_mtx);
 		}
 	} while (!for_real++);
-	free_page((unsigned long)buf);
+	free_page(buf);
 	return count;
 parse_error:
-	free_page((unsigned long)buf);
+	free_page(buf);
 	printk("%s(): parse error\n", __func__);
 	return -EINVAL;
 }
diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
index 179e813..7601ee0 100644
--- a/drivers/infiniband/core/device.c
+++ b/drivers/infiniband/core/device.c
@@ -157,7 +157,7 @@ static int alloc_name(char *name)
 	}
 
 	i = find_first_zero_bit(inuse, PAGE_SIZE * 8);
-	free_page((unsigned long) inuse);
+	free_page(inuse);
 	snprintf(buf, sizeof buf, name, i);
 
 	if (__ib_device_get_by_name(buf))
diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
index 38acb3c..a81e139 100644
--- a/drivers/infiniband/core/umem.c
+++ b/drivers/infiniband/core/umem.c
@@ -235,8 +235,8 @@ out:
 
 	up_write(&current->mm->mmap_sem);
 	if (vma_list)
-		free_page((unsigned long) vma_list);
-	free_page((unsigned long) page_list);
+		free_page(vma_list);
+	free_page(page_list);
 
 	return ret < 0 ? ERR_PTR(ret) : umem;
 }
diff --git a/drivers/infiniband/core/umem_odp.c b/drivers/infiniband/core/umem_odp.c
index 40becdb..8b14a3f 100644
--- a/drivers/infiniband/core/umem_odp.c
+++ b/drivers/infiniband/core/umem_odp.c
@@ -613,7 +613,7 @@ int ib_umem_odp_map_dma_pages(struct ib_umem *umem, u64 user_virt, u64 bcnt,
 out_put_task:
 	put_task_struct(owning_process);
 out_no_task:
-	free_page((unsigned long)local_page_list);
+	free_page(local_page_list);
 	return ret;
 }
 EXPORT_SYMBOL(ib_umem_odp_map_dma_pages);
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c
index c34725c..a80b709 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
@@ -687,7 +687,7 @@ static struct ib_mr *iwch_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
 		err = iwch_write_pbl(mhp, pages, i, n);
 
 pbl_done:
-	free_page((unsigned long) pages);
+	free_page(pages);
 	if (err)
 		goto err_pbl;
 
diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c
index 58fce174..870ac06 100644
--- a/drivers/infiniband/hw/cxgb4/device.c
+++ b/drivers/infiniband/hw/cxgb4/device.c
@@ -882,7 +882,7 @@ err1:
 static void c4iw_rdev_close(struct c4iw_rdev *rdev)
 {
 	kfree(rdev->wr_log);
-	free_page((unsigned long)rdev->status_page);
+	free_page(rdev->status_page);
 	c4iw_pblpool_destroy(rdev);
 	c4iw_rqtpool_destroy(rdev);
 	c4iw_destroy_resource(&rdev->resource);
diff --git a/drivers/infiniband/hw/cxgb4/mem.c b/drivers/infiniband/hw/cxgb4/mem.c
index e1629ab..9720caa 100644
--- a/drivers/infiniband/hw/cxgb4/mem.c
+++ b/drivers/infiniband/hw/cxgb4/mem.c
@@ -773,7 +773,7 @@ struct ib_mr *c4iw_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
 				     mhp->attr.pbl_addr + (n << 3), i);
 
 pbl_done:
-	free_page((unsigned long) pages);
+	free_page(pages);
 	if (err)
 		goto err_pbl;
 
diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c
index 4d1e1c6..227c99bb 100644
--- a/drivers/infiniband/hw/mlx4/mr.c
+++ b/drivers/infiniband/hw/mlx4/mr.c
@@ -126,7 +126,7 @@ int mlx4_ib_umem_write_mtt(struct mlx4_ib_dev *dev, struct mlx4_mtt *mtt,
 		err = mlx4_write_mtt(dev->dev, mtt, n, i, pages);
 
 out:
-	free_page((unsigned long) pages);
+	free_page(pages);
 	return err;
 }
 
diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c
index 6000f7a..ffa411a 100644
--- a/drivers/infiniband/hw/mlx5/mr.c
+++ b/drivers/infiniband/hw/mlx5/mr.c
@@ -966,7 +966,7 @@ int mlx5_ib_update_mtt(struct mlx5_ib_mr *mr, u64 start_page_index, int npages,
 
 free_pas:
 	if (!use_emergency_buf)
-		free_page((unsigned long)pas);
+		free_page(pas);
 	else
 		mutex_unlock(&mlx5_ib_update_mtt_emergency_buffer_mutex);
 
diff --git a/drivers/infiniband/hw/mlx5/odp.c b/drivers/infiniband/hw/mlx5/odp.c
index aa8391e..899add65 100644
--- a/drivers/infiniband/hw/mlx5/odp.c
+++ b/drivers/infiniband/hw/mlx5/odp.c
@@ -588,7 +588,7 @@ resolve_page_fault:
 	mlx5_ib_dbg(dev, "PAGE FAULT completed. QP 0x%x resume_with_error=%d, flags: 0x%x\n",
 		    qp->mqp.qpn, resume_with_error, pfault->mpfault.flags);
 
-	free_page((unsigned long)buffer);
+	free_page(buffer);
 }
 
 static int pages_in_range(u64 address, u32 length)
diff --git a/drivers/infiniband/hw/mthca/mthca_allocator.c b/drivers/infiniband/hw/mthca/mthca_allocator.c
index b4e0cf4..d15552a 100644
--- a/drivers/infiniband/hw/mthca/mthca_allocator.c
+++ b/drivers/infiniband/hw/mthca/mthca_allocator.c
@@ -147,7 +147,7 @@ void mthca_array_clear(struct mthca_array *array, int index)
 	int p = (index * sizeof (void *)) >> PAGE_SHIFT;
 
 	if (--array->page_list[p].used == 0) {
-		free_page((unsigned long) array->page_list[p].page);
+		free_page(array->page_list[p].page);
 		array->page_list[p].page = NULL;
 	} else
 		array->page_list[p].page[index & MTHCA_ARRAY_MASK] = NULL;
@@ -179,7 +179,7 @@ void mthca_array_cleanup(struct mthca_array *array, int nent)
 	int i;
 
 	for (i = 0; i < (nent * sizeof (void *) + PAGE_SIZE - 1) / PAGE_SIZE; ++i)
-		free_page((unsigned long) array->page_list[i].page);
+		free_page(array->page_list[i].page);
 
 	kfree(array->page_list);
 }
diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c
index dc2d48c..e95980e 100644
--- a/drivers/infiniband/hw/mthca/mthca_provider.c
+++ b/drivers/infiniband/hw/mthca/mthca_provider.c
@@ -1058,7 +1058,7 @@ static struct ib_mr *mthca_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
 	if (i)
 		err = mthca_write_mtt(dev, mr->mtt, n, pages, i);
 mtt_done:
-	free_page((unsigned long) pages);
+	free_page(pages);
 	if (err)
 		goto err_mtt;
 
diff --git a/drivers/infiniband/hw/qib/qib_qp.c b/drivers/infiniband/hw/qib/qib_qp.c
index 40f85bb..6ff0112 100644
--- a/drivers/infiniband/hw/qib/qib_qp.c
+++ b/drivers/infiniband/hw/qib/qib_qp.c
@@ -110,7 +110,7 @@ static void get_map_page(struct qib_qpn_table *qpt, struct qpn_map *map)
 
 	spin_lock(&qpt->lock);
 	if (map->page)
-		free_page(page);
+		free_page((void *)page);
 	else
 		map->page = (void *)page;
 	spin_unlock(&qpt->lock);
@@ -1252,7 +1252,7 @@ void qib_free_qpn_table(struct qib_qpn_table *qpt)
 
 	for (i = 0; i < ARRAY_SIZE(qpt->map); i++)
 		if (qpt->map[i].page)
-			free_page((unsigned long) qpt->map[i].page);
+			free_page(qpt->map[i].page);
 }
 
 /**
diff --git a/drivers/infiniband/hw/usnic/usnic_uiom.c b/drivers/infiniband/hw/usnic/usnic_uiom.c
index 645a5f6..daaaf3d 100644
--- a/drivers/infiniband/hw/usnic/usnic_uiom.c
+++ b/drivers/infiniband/hw/usnic/usnic_uiom.c
@@ -190,7 +190,7 @@ out:
 		current->mm->locked_vm = locked;
 
 	up_write(&current->mm->mmap_sem);
-	free_page((unsigned long) page_list);
+	free_page(page_list);
 	return ret;
 }
 
diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
index 0a9ad2cf..d70a619 100644
--- a/drivers/input/misc/xen-kbdfront.c
+++ b/drivers/input/misc/xen-kbdfront.c
@@ -226,7 +226,7 @@ static int xenkbd_remove(struct xenbus_device *dev)
 		input_unregister_device(info->kbd);
 	if (info->ptr)
 		input_unregister_device(info->ptr);
-	free_page((unsigned long)info->page);
+	free_page(info->page);
 	kfree(info);
 	return 0;
 }
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index 8b2be1e..3102804 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -1466,7 +1466,7 @@ static int alloc_new_range(struct dma_ops_domain *dma_dom,
 out_free:
 	update_domain(&dma_dom->domain);
 
-	free_page((unsigned long)dma_dom->aperture[index]->bitmap);
+	free_page(dma_dom->aperture[index]->bitmap);
 
 	kfree(dma_dom->aperture[index]);
 	dma_dom->aperture[index] = NULL;
@@ -1642,9 +1642,9 @@ static void domain_id_free(int id)
 }
 
 #define DEFINE_FREE_PT_FN(LVL, FN)				\
-static void free_pt_##LVL (unsigned long __pt)			\
+static void free_pt_##LVL (void *__pt)				\
 {								\
-	unsigned long p;					\
+	void *p;						\
 	u64 *pt;						\
 	int i;							\
 								\
@@ -1660,10 +1660,10 @@ static void free_pt_##LVL (unsigned long __pt)			\
 		    PM_PTE_LEVEL(pt[i]) == 7)			\
 			continue;				\
 								\
-		p = (unsigned long)IOMMU_PTE_PAGE(pt[i]);	\
+		p = IOMMU_PTE_PAGE(pt[i]);			\
 		FN(p);						\
 	}							\
-	free_page((unsigned long)pt);				\
+	free_page(pt);						\
 }
 
 DEFINE_FREE_PT_FN(l2, free_page)
@@ -1674,7 +1674,7 @@ DEFINE_FREE_PT_FN(l6, free_pt_l5)
 
 static void free_pagetable(struct protection_domain *domain)
 {
-	unsigned long root = (unsigned long)domain->pt_root;
+	void *root = domain->pt_root;
 
 	switch (domain->mode) {
 	case PAGE_MODE_NONE:
@@ -1713,7 +1713,7 @@ static void free_gcr3_tbl_level1(u64 *tbl)
 
 		ptr = __va(tbl[i] & PAGE_MASK);
 
-		free_page((unsigned long)ptr);
+		free_page(ptr);
 	}
 }
 
@@ -1741,7 +1741,7 @@ static void free_gcr3_table(struct protection_domain *domain)
 	else
 		BUG_ON(domain->glx != 0);
 
-	free_page((unsigned long)domain->gcr3_tbl);
+	free_page(domain->gcr3_tbl);
 }
 
 /*
@@ -1762,7 +1762,7 @@ static void dma_ops_domain_free(struct dma_ops_domain *dom)
 	for (i = 0; i < APERTURE_MAX_RANGES; ++i) {
 		if (!dom->aperture[i])
 			continue;
-		free_page((unsigned long)dom->aperture[i]->bitmap);
+		free_page(dom->aperture[i]->bitmap);
 		kfree(dom->aperture[i]);
 	}
 
diff --git a/drivers/iommu/amd_iommu_v2.c b/drivers/iommu/amd_iommu_v2.c
index d21d4ed..a347fc3 100644
--- a/drivers/iommu/amd_iommu_v2.c
+++ b/drivers/iommu/amd_iommu_v2.c
@@ -309,7 +309,7 @@ static void free_pasid_states_level1(struct pasid_state **tbl)
 		if (tbl[i] == NULL)
 			continue;
 
-		free_page((unsigned long)tbl[i]);
+		free_page(tbl[i]);
 	}
 }
 
@@ -359,7 +359,7 @@ static void free_pasid_states(struct device_state *dev_state)
 	else
 		BUG_ON(dev_state->pasid_levels != 0);
 
-	free_page((unsigned long)dev_state->states);
+	free_page(dev_state->states);
 }
 
 static struct pasid_state *mn_to_state(struct mmu_notifier *mn)
@@ -823,7 +823,7 @@ out_free_domain:
 	iommu_domain_free(dev_state->domain);
 
 out_free_states:
-	free_page((unsigned long)dev_state->states);
+	free_page(dev_state->states);
 
 out_free_dev_state:
 	kfree(dev_state);
diff --git a/drivers/iommu/dmar.c b/drivers/iommu/dmar.c
index 80e3c17..37f4c82 100644
--- a/drivers/iommu/dmar.c
+++ b/drivers/iommu/dmar.c
@@ -1097,7 +1097,7 @@ static void free_iommu(struct intel_iommu *iommu)
 	}
 
 	if (iommu->qi) {
-		free_page((unsigned long)iommu->qi->desc);
+		free_page(iommu->qi->desc);
 		kfree(iommu->qi->desc_status);
 		kfree(iommu->qi);
 	}
@@ -1433,7 +1433,7 @@ int dmar_enable_qi(struct intel_iommu *iommu)
 
 	qi->desc_status = kzalloc(QI_LENGTH * sizeof(int), GFP_ATOMIC);
 	if (!qi->desc_status) {
-		free_page((unsigned long) qi->desc);
+		free_page(qi->desc);
 		kfree(qi);
 		iommu->qi = NULL;
 		return -ENOMEM;
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index ac73876..1330044 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -655,7 +655,7 @@ static inline void *alloc_pgtable_page(int node)
 
 static inline void free_pgtable_page(void *vaddr)
 {
-	free_page((unsigned long)vaddr);
+	free_page(vaddr);
 }
 
 static inline void *alloc_domain_mem(void)
diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c
index e321fa5..b8bcc57 100644
--- a/drivers/iommu/msm_iommu.c
+++ b/drivers/iommu/msm_iommu.c
@@ -260,8 +260,7 @@ static void msm_iommu_domain_free(struct iommu_domain *domain)
 
 	for (i = 0; i < NUM_FL_PTE; i++)
 		if ((fl_table[i] & 0x03) == FL_TYPE_TABLE)
-			free_page((unsigned long) __va(((fl_table[i]) &
-							FL_BASE_MASK)));
+			free_page(__va(((fl_table[i]) & FL_BASE_MASK)));
 
 	free_pages((unsigned long)priv->pgtable, get_order(SZ_16K));
 	priv->pgtable = NULL;
@@ -536,7 +535,7 @@ static size_t msm_iommu_unmap(struct iommu_domain *domain, unsigned long va,
 			if (sl_table[i])
 				used = 1;
 		if (!used) {
-			free_page((unsigned long)sl_table);
+			free_page(sl_table);
 			*fl_pte = 0;
 		}
 	}
diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c
index ebf0adb..eca78ef 100644
--- a/drivers/iommu/rockchip-iommu.c
+++ b/drivers/iommu/rockchip-iommu.c
@@ -867,11 +867,11 @@ static void rk_iommu_domain_free(struct iommu_domain *domain)
 		if (rk_dte_is_pt_valid(dte)) {
 			phys_addr_t pt_phys = rk_dte_pt_address(dte);
 			u32 *page_table = phys_to_virt(pt_phys);
-			free_page((unsigned long)page_table);
+			free_page(page_table);
 		}
 	}
 
-	free_page((unsigned long)rk_domain->dt);
+	free_page(rk_domain->dt);
 	kfree(rk_domain);
 }
 
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index e23d1d1..2513a68 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -808,7 +808,7 @@ static void its_free_tables(struct its_node *its)
 
 	for (i = 0; i < GITS_BASER_NR_REGS; i++) {
 		if (its->tables[i]) {
-			free_page((unsigned long)its->tables[i]);
+			free_page(its->tables[i]);
 			its->tables[i] = NULL;
 		}
 	}
diff --git a/drivers/lguest/lguest_user.c b/drivers/lguest/lguest_user.c
index 30c6068..328e249 100644
--- a/drivers/lguest/lguest_user.c
+++ b/drivers/lguest/lguest_user.c
@@ -275,7 +275,7 @@ static int initialize(struct file *file, const unsigned long __user *input)
 
 free_regs:
 	/* FIXME: This should be in free_vcpu */
-	free_page(lg->cpus[0].regs_page);
+	free_page((void *)lg->cpus[0].regs_page);
 free_lg:
 	kfree(lg);
 unlock:
@@ -377,7 +377,7 @@ static int close(struct inode *inode, struct file *file)
 		/* Cancels the hrtimer set via LHCALL_SET_CLOCKEVENT. */
 		hrtimer_cancel(&lg->cpus[i].hrt);
 		/* We can free up the register page we allocated. */
-		free_page(lg->cpus[i].regs_page);
+		free_page((void *)lg->cpus[i].regs_page);
 		/*
 		 * Now all the memory cleanups are done, it's safe to release
 		 * the Launcher's memory management structure.
diff --git a/drivers/lguest/page_tables.c b/drivers/lguest/page_tables.c
index e3abebc9..012b10a 100644
--- a/drivers/lguest/page_tables.c
+++ b/drivers/lguest/page_tables.c
@@ -595,7 +595,7 @@ static void release_pmd(pmd_t *spmd)
 		for (i = 0; i < PTRS_PER_PTE; i++)
 			release_pte(ptepage[i]);
 		/* Now we can free the page of PTEs */
-		free_page((long)ptepage);
+		free_page(ptepage);
 		/* And zero out the PMD entry so we never release it twice. */
 		set_pmd(spmd, __pmd(0));
 	}
@@ -612,7 +612,7 @@ static void release_pgd(pgd_t *spgd)
 			release_pmd(&pmdpage[i]);
 
 		/* Now we can free the page of PMDs */
-		free_page((long)pmdpage);
+		free_page(pmdpage);
 		/* And zero out the PGD entry so we never release it twice. */
 		set_pgd(spgd, __pgd(0));
 	}
@@ -639,7 +639,7 @@ static void release_pgd(pgd_t *spgd)
 		for (i = 0; i < PTRS_PER_PTE; i++)
 			release_pte(ptepage[i]);
 		/* Now we can free the page of PTEs */
-		free_page((long)ptepage);
+		free_page(ptepage);
 		/* And zero out the PGD entry so we never release it twice. */
 		*spgd = __pgd(0);
 	}
@@ -1133,7 +1133,7 @@ void free_guest_pagetable(struct lguest *lg)
 	release_all_pagetables(lg);
 	/* Now free the top levels: free_page() can handle 0 just fine. */
 	for (i = 0; i < ARRAY_SIZE(lg->pgdirs); i++)
-		free_page((long)lg->pgdirs[i].pgdir);
+		free_page(lg->pgdirs[i].pgdir);
 }
 
 /*H:481
diff --git a/drivers/macintosh/rack-meter.c b/drivers/macintosh/rack-meter.c
index 048901a..ff85b7b 100644
--- a/drivers/macintosh/rack-meter.c
+++ b/drivers/macintosh/rack-meter.c
@@ -509,7 +509,7 @@ static int rackmeter_probe(struct macio_dev* mdev,
 			  sizeof(struct rackmeter_dma),
 			  rm->dma_buf_v, rm->dma_buf_p);
  bail_free_samples:
-	free_page((unsigned long)rm->ubuf);
+	free_page(rm->ubuf);
  bail_release:
 #if 0
 	macio_release_resources(mdev);
@@ -549,7 +549,7 @@ static int rackmeter_remove(struct macio_dev* mdev)
 			  rm->dma_buf_v, rm->dma_buf_p);
 
 	/* Free samples */
-	free_page((unsigned long)rm->ubuf);
+	free_page(rm->ubuf);
 
 #if 0
 	/* Release resources */
diff --git a/drivers/media/pci/pt1/pt1.c b/drivers/media/pci/pt1/pt1.c
index e7e4428..ce4f862 100644
--- a/drivers/media/pci/pt1/pt1.c
+++ b/drivers/media/pci/pt1/pt1.c
@@ -624,7 +624,7 @@ static void pt1_free_adapter(struct pt1_adapter *adap)
 	dvb_dmxdev_release(&adap->dmxdev);
 	dvb_dmx_release(&adap->demux);
 	dvb_unregister_adapter(&adap->adap);
-	free_page((unsigned long)adap->buf);
+	free_page(adap->buf);
 	kfree(adap);
 }
 
@@ -696,7 +696,7 @@ err_dmx_release:
 err_unregister_adapter:
 	dvb_unregister_adapter(dvb_adap);
 err_free_page:
-	free_page((unsigned long)buf);
+	free_page(buf);
 err_kfree:
 	kfree(adap);
 err:
diff --git a/drivers/media/pci/saa7134/saa7134-go7007.c b/drivers/media/pci/saa7134/saa7134-go7007.c
index 8a2abb3..083297d 100644
--- a/drivers/media/pci/saa7134/saa7134-go7007.c
+++ b/drivers/media/pci/saa7134/saa7134-go7007.c
@@ -475,9 +475,9 @@ static int saa7134_go7007_init(struct saa7134_dev *dev)
 
 allocfail:
 	if (saa->top)
-		free_page((unsigned long)saa->top);
+		free_page(saa->top);
 	if (saa->bottom)
-		free_page((unsigned long)saa->bottom);
+		free_page(saa->bottom);
 	kfree(saa);
 	kfree(go);
 	return -ENOMEM;
@@ -497,8 +497,8 @@ static int saa7134_go7007_fini(struct saa7134_dev *dev)
 
 	saa = go->hpi_context;
 	go->status = STATUS_SHUTDOWN;
-	free_page((unsigned long)saa->top);
-	free_page((unsigned long)saa->bottom);
+	free_page(saa->top);
+	free_page(saa->bottom);
 	v4l2_device_unregister_subdev(&saa->sd);
 	kfree(saa);
 	video_unregister_device(&go->vdev);
diff --git a/drivers/media/pci/ttpci/av7110_ca.c b/drivers/media/pci/ttpci/av7110_ca.c
index a6079b9..ed9c8380 100644
--- a/drivers/media/pci/ttpci/av7110_ca.c
+++ b/drivers/media/pci/ttpci/av7110_ca.c
@@ -182,7 +182,7 @@ static ssize_t ci_ll_write(struct dvb_ringbuffer *cibuf, struct file *file,
 
 	res = dvb_ringbuffer_write(cibuf, page, count);
 out:
-	free_page((unsigned long)page);
+	free_page(page);
 	return res;
 }
 
diff --git a/drivers/media/pci/zoran/zoran_driver.c b/drivers/media/pci/zoran/zoran_driver.c
index 80caa70..c19037f 100644
--- a/drivers/media/pci/zoran/zoran_driver.c
+++ b/drivers/media/pci/zoran/zoran_driver.c
@@ -418,13 +418,13 @@ static void jpg_fbuffer_free(struct zoran_fh *fh)
 				if (!frag_tab)
 					break;
 				ClearPageReserved(virt_to_page(bus_to_virt(le32_to_cpu(frag_tab))));
-				free_page((unsigned long)bus_to_virt(le32_to_cpu(frag_tab)));
+				free_page(bus_to_virt(le32_to_cpu(frag_tab)));
 				buffer->jpg.frag_tab[2 * j] = 0;
 				buffer->jpg.frag_tab[2 * j + 1] = 0;
 			}
 		}
 
-		free_page((unsigned long)buffer->jpg.frag_tab);
+		free_page(buffer->jpg.frag_tab);
 		buffer->jpg.frag_tab = NULL;
 	}
 
diff --git a/drivers/misc/cxl/context.c b/drivers/misc/cxl/context.c
index 2faa127..a7d7efb 100644
--- a/drivers/misc/cxl/context.c
+++ b/drivers/misc/cxl/context.c
@@ -268,7 +268,7 @@ static void reclaim_ctx(struct rcu_head *rcu)
 {
 	struct cxl_context *ctx = container_of(rcu, struct cxl_context, rcu);
 
-	free_page((u64)ctx->sstp);
+	free_page(ctx->sstp);
 	if (ctx->ff_page)
 		__free_page(ctx->ff_page);
 	ctx->sstp = NULL;
diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
index 85761d7..2750bff 100644
--- a/drivers/misc/cxl/pci.c
+++ b/drivers/misc/cxl/pci.c
@@ -798,7 +798,7 @@ ssize_t cxl_afu_read_err_buffer(struct cxl_afu *afu, char *buf,
 	memcpy_fromio(tbuf, ebuf + aligned_start, aligned_length);
 	memcpy(buf, tbuf + (off & 0x7), count);
 
-	free_page((unsigned long)tbuf);
+	free_page(tbuf);
 
 	return count;
 }
diff --git a/drivers/misc/ibmasm/ibmasmfs.c b/drivers/misc/ibmasm/ibmasmfs.c
index e8b9331..6694cca 100644
--- a/drivers/misc/ibmasm/ibmasmfs.c
+++ b/drivers/misc/ibmasm/ibmasmfs.c
@@ -534,7 +534,7 @@ static ssize_t remote_settings_file_read(struct file *file, char __user *buf, si
 	retval = len;
 
 exit:
-	free_page((unsigned long)page);
+	free_page(page);
 	return retval;
 }
 
diff --git a/drivers/misc/lkdtm.c b/drivers/misc/lkdtm.c
index 11fdadc..0446145 100644
--- a/drivers/misc/lkdtm.c
+++ b/drivers/misc/lkdtm.c
@@ -631,7 +631,7 @@ static ssize_t do_register_entry(enum cname which, struct file *f,
 	if (!buf)
 		return -ENOMEM;
 	if (copy_from_user(buf, user_buf, count)) {
-		free_page((unsigned long) buf);
+		free_page(buf);
 		return -EFAULT;
 	}
 	/* NULL-terminate and remove enter */
@@ -639,7 +639,7 @@ static ssize_t do_register_entry(enum cname which, struct file *f,
 	strim(buf);
 
 	cptype = parse_cp_type(buf, count);
-	free_page((unsigned long) buf);
+	free_page(buf);
 
 	if (cptype == CT_NONE)
 		return -EINVAL;
@@ -671,7 +671,7 @@ static ssize_t lkdtm_debugfs_read(struct file *f, char __user *user_buf,
 
 	out = simple_read_from_buffer(user_buf, count, off,
 				      buf, n);
-	free_page((unsigned long) buf);
+	free_page(buf);
 
 	return out;
 }
@@ -746,7 +746,7 @@ static ssize_t direct_entry(struct file *f, const char __user *user_buf,
 	if (!buf)
 		return -ENOMEM;
 	if (copy_from_user(buf, user_buf, count)) {
-		free_page((unsigned long) buf);
+		free_page(buf);
 		return -EFAULT;
 	}
 	/* NULL-terminate and remove enter */
@@ -754,7 +754,7 @@ static ssize_t direct_entry(struct file *f, const char __user *user_buf,
 	strim(buf);
 
 	type = parse_cp_type(buf, count);
-	free_page((unsigned long) buf);
+	free_page(buf);
 	if (type == CT_NONE)
 		return -EINVAL;
 
diff --git a/drivers/net/ethernet/i825xx/82596.c b/drivers/net/ethernet/i825xx/82596.c
index 7ce6379..b276776 100644
--- a/drivers/net/ethernet/i825xx/82596.c
+++ b/drivers/net/ethernet/i825xx/82596.c
@@ -1230,7 +1230,7 @@ out2:
 	kernel_set_cachemode((void *)(dev->mem_start), 4096,
 			IOMAP_FULL_CACHING);
 #endif
-	free_page ((u32)(dev->mem_start));
+	free_page ((void *)(dev->mem_start));
 out1:
 out:
 	free_netdev(dev);
@@ -1541,7 +1541,7 @@ void __exit cleanup_module(void)
 	kernel_set_cachemode((void *)(dev_82596->mem_start), 4096,
 			IOMAP_FULL_CACHING);
 #endif
-	free_page ((u32)(dev_82596->mem_start));
+	free_page ((void *)(dev_82596->mem_start));
 	free_netdev(dev_82596);
 }
 
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_main.c b/drivers/net/ethernet/ibm/ehea/ehea_main.c
index 2a0dc12..2d9d8e7 100644
--- a/drivers/net/ethernet/ibm/ehea/ehea_main.c
+++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c
@@ -385,7 +385,7 @@ static void ehea_update_stats(struct work_struct *work)
 	stats->rx_errors = cb2->rxuerr;
 
 out_herr:
-	free_page((unsigned long)cb2);
+	free_page(cb2);
 resched:
 	schedule_delayed_work(&port->stats_work,
 			      round_jiffies_relative(msecs_to_jiffies(1000)));
@@ -1074,7 +1074,7 @@ int ehea_sense_port_attr(struct ehea_port *port)
 out_free:
 	if (ret || netif_msg_probe(port))
 		ehea_dump(cb0, sizeof(*cb0), "ehea_sense_port_attr");
-	free_page((unsigned long)cb0);
+	free_page(cb0);
 out:
 	return ret;
 }
@@ -1153,7 +1153,7 @@ int ehea_set_portspeed(struct ehea_port *port, u32 port_speed)
 	if (!prop_carrier_state || (port->phy_link == EHEA_PHY_LINK_UP))
 		netif_carrier_on(port->netdev);
 
-	free_page((unsigned long)cb4);
+	free_page(cb4);
 out:
 	return ret;
 }
@@ -1410,7 +1410,7 @@ static int ehea_configure_port(struct ehea_port *port)
 	ret = 0;
 
 out_free:
-	free_page((unsigned long)cb0);
+	free_page(cb0);
 out:
 	return ret;
 }
@@ -1795,7 +1795,7 @@ static int ehea_set_mac_addr(struct net_device *dev, void *sa)
 out_upregs:
 	ehea_update_bcmc_registrations();
 out_free:
-	free_page((unsigned long)cb0);
+	free_page(cb0);
 out:
 	return ret;
 }
@@ -1838,7 +1838,7 @@ static void ehea_promiscuous(struct net_device *dev, int enable)
 
 	port->promisc = enable;
 out:
-	free_page((unsigned long)cb7);
+	free_page(cb7);
 }
 
 static u64 ehea_multicast_reg_helper(struct ehea_port *port, u64 mc_mac_addr,
@@ -2156,7 +2156,7 @@ static int ehea_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid)
 		err = -EINVAL;
 	}
 out:
-	free_page((unsigned long)cb1);
+	free_page(cb1);
 	return err;
 }
 
@@ -2194,7 +2194,7 @@ static int ehea_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid)
 		err = -EINVAL;
 	}
 out:
-	free_page((unsigned long)cb1);
+	free_page(cb1);
 	return err;
 }
 
@@ -2269,7 +2269,7 @@ static int ehea_activate_qp(struct ehea_adapter *adapter, struct ehea_qp *qp)
 
 	ret = 0;
 out:
-	free_page((unsigned long)cb0);
+	free_page(cb0);
 	return ret;
 }
 
@@ -2604,7 +2604,7 @@ static int ehea_stop_qps(struct net_device *dev)
 
 	ret = 0;
 out:
-	free_page((unsigned long)cb0);
+	free_page(cb0);
 
 	return ret;
 }
@@ -2707,7 +2707,7 @@ static int ehea_restart_qps(struct net_device *dev)
 		ehea_refill_rq3(pr, 0);
 	}
 out:
-	free_page((unsigned long)cb0);
+	free_page(cb0);
 
 	return ret;
 }
@@ -2856,7 +2856,7 @@ static int ehea_sense_adapter_attr(struct ehea_adapter *adapter)
 	ret = 0;
 
 out_herr:
-	free_page((unsigned long)cb);
+	free_page(cb);
 out:
 	return ret;
 }
@@ -2898,7 +2898,7 @@ static int ehea_get_jumboframe_status(struct ehea_port *port, int *jumbo)
 		} else
 			ret = -EINVAL;
 
-		free_page((unsigned long)cb4);
+		free_page(cb4);
 	}
 out:
 	return ret;
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_qmr.c b/drivers/net/ethernet/ibm/ehea/ehea_qmr.c
index a0820f7..3ca48a5 100644
--- a/drivers/net/ethernet/ibm/ehea/ehea_qmr.c
+++ b/drivers/net/ethernet/ibm/ehea/ehea_qmr.c
@@ -96,7 +96,7 @@ out_nomem:
 	for (i = 0; i < nr_of_pages; i += pages_per_kpage) {
 		if (!(queue->queue_pages)[i])
 			break;
-		free_page((unsigned long)(queue->queue_pages)[i]);
+		free_page((queue->queue_pages)[i]);
 	}
 	return -ENOMEM;
 }
@@ -114,7 +114,7 @@ static void hw_queue_dtor(struct hw_queue *queue)
 	nr_pages = queue->queue_length / queue->pagesize;
 
 	for (i = 0; i < nr_pages; i += pages_per_kpage)
-		free_page((unsigned long)(queue->queue_pages)[i]);
+		free_page((queue->queue_pages)[i]);
 
 	kfree(queue->queue_pages);
 }
@@ -930,7 +930,7 @@ int ehea_reg_kernel_mr(struct ehea_adapter *adapter, struct ehea_mr *mr)
 	mr->adapter = adapter;
 	ret = 0;
 out:
-	free_page((unsigned long)pt);
+	free_page(pt);
 	return ret;
 }
 
@@ -1016,7 +1016,7 @@ u64 ehea_error_data(struct ehea_adapter *adapter, u64 res_handle,
 	} else
 		pr_err("Error data could not be fetched: %llX\n", res_handle);
 
-	free_page((unsigned long)rblock);
+	free_page(rblock);
 out:
 	return type;
 }
diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
index 7af870a..cf7dd33 100644
--- a/drivers/net/ethernet/ibm/ibmveth.c
+++ b/drivers/net/ethernet/ibm/ibmveth.c
@@ -475,7 +475,7 @@ static void ibmveth_cleanup(struct ibmveth_adapter *adapter)
 					DMA_BIDIRECTIONAL);
 			adapter->buffer_list_dma = DMA_ERROR_CODE;
 		}
-		free_page((unsigned long)adapter->buffer_list_addr);
+		free_page(adapter->buffer_list_addr);
 		adapter->buffer_list_addr = NULL;
 	}
 
@@ -485,7 +485,7 @@ static void ibmveth_cleanup(struct ibmveth_adapter *adapter)
 					DMA_BIDIRECTIONAL);
 			adapter->filter_list_dma = DMA_ERROR_CODE;
 		}
-		free_page((unsigned long)adapter->filter_list_addr);
+		free_page(adapter->filter_list_addr);
 		adapter->filter_list_addr = NULL;
 	}
 
diff --git a/drivers/net/ethernet/seeq/sgiseeq.c b/drivers/net/ethernet/seeq/sgiseeq.c
index ca73366..db3a0d9 100644
--- a/drivers/net/ethernet/seeq/sgiseeq.c
+++ b/drivers/net/ethernet/seeq/sgiseeq.c
@@ -800,7 +800,7 @@ static int sgiseeq_probe(struct platform_device *pdev)
 	return 0;
 
 err_out_free_page:
-	free_page((unsigned long) sp->srings);
+	free_page(sp->srings);
 err_out_free_dev:
 	free_netdev(dev);
 
diff --git a/drivers/net/ethernet/sfc/mcdi.c b/drivers/net/ethernet/sfc/mcdi.c
index 41fb6b6..36c786b 100644
--- a/drivers/net/ethernet/sfc/mcdi.c
+++ b/drivers/net/ethernet/sfc/mcdi.c
@@ -119,7 +119,7 @@ int efx_mcdi_init(struct efx_nic *efx)
 	return 0;
 fail2:
 #ifdef CONFIG_SFC_MCDI_LOGGING
-	free_page((unsigned long)mcdi->logging_buffer);
+	free_page(mcdi->logging_buffer);
 fail1:
 #endif
 	kfree(efx->mcdi);
@@ -139,7 +139,7 @@ void efx_mcdi_fini(struct efx_nic *efx)
 	efx_mcdi_drv_attach(efx, false, NULL);
 
 #ifdef CONFIG_SFC_MCDI_LOGGING
-	free_page((unsigned long)efx->mcdi->iface.logging_buffer);
+	free_page(efx->mcdi->iface.logging_buffer);
 #endif
 
 	kfree(efx->mcdi);
diff --git a/drivers/net/ethernet/sgi/ioc3-eth.c b/drivers/net/ethernet/sgi/ioc3-eth.c
index 7a254da..d3b1416 100644
--- a/drivers/net/ethernet/sgi/ioc3-eth.c
+++ b/drivers/net/ethernet/sgi/ioc3-eth.c
@@ -887,7 +887,7 @@ static void ioc3_free_rings(struct ioc3_private *ip)
 
 			n_entry = (n_entry + 1) & 511;
 		}
-		free_page((unsigned long)ip->rxr);
+		free_page(ip->rxr);
 		ip->rxr = NULL;
 	}
 }
diff --git a/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c b/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c
index 13214a6..c1b3142 100644
--- a/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c
+++ b/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c
@@ -1430,7 +1430,7 @@ static struct iw_statistics *gelic_wl_get_wireless_stats(
 		is->qual.updated = IW_QUAL_ALL_INVALID;
 
 	kfree(cmd);
-	free_page((unsigned long)buf);
+	free_page(buf);
 	pr_debug("%s: ->\n", __func__);
 	return is;
 }
@@ -1498,7 +1498,7 @@ static int gelic_wl_start_scan(struct gelic_wl_info *wl, int always_scan,
 	}
 	kfree(cmd);
 out:
-	free_page((unsigned long)buf);
+	free_page(buf);
 	mutex_unlock(&wl->scan_lock);
 	pr_debug("%s: ->\n", __func__);
 	return ret;
@@ -1642,7 +1642,7 @@ static void gelic_wl_scan_complete_event(struct gelic_wl_info *wl)
 	wireless_send_event(port_to_netdev(wl_port(wl)), SIOCGIWSCAN, &data,
 			    NULL);
 out:
-	free_page((unsigned long)buf);
+	free_page(buf);
 	complete(&wl->scan_done);
 	mutex_unlock(&wl->scan_lock);
 	pr_debug("%s:end\n", __func__);
@@ -1817,7 +1817,7 @@ static int gelic_wl_do_wep_setup(struct gelic_wl_info *wl)
 
 	kfree(cmd);
 out:
-	free_page((unsigned long)wep);
+	free_page(wep);
 	pr_debug("%s: ->\n", __func__);
 	return ret;
 }
@@ -1916,7 +1916,7 @@ static int gelic_wl_do_wpa_setup(struct gelic_wl_info *wl)
 	else if (cmd->status || cmd->cmd_status)
 		ret = -ENXIO;
 	kfree(cmd);
-	free_page((unsigned long)wpa);
+	free_page(wpa);
 	pr_debug("%s: --> %d\n", __func__, ret);
 	return ret;
 }
@@ -2027,7 +2027,7 @@ static int gelic_wl_associate_bss(struct gelic_wl_info *wl,
 		pr_info("%s: connected\n", __func__);
 	}
 out:
-	free_page((unsigned long)common);
+	free_page(common);
 	pr_debug("%s: ->\n", __func__);
 	return ret;
 }
diff --git a/drivers/net/usb/kaweth.c b/drivers/net/usb/kaweth.c
index f64b25c..a8493be 100644
--- a/drivers/net/usb/kaweth.c
+++ b/drivers/net/usb/kaweth.c
@@ -1093,7 +1093,7 @@ static int kaweth_probe(
 		/* Device will now disappear for a moment...  */
 		dev_info(dev, "Firmware loaded.  I'll be back...\n");
 err_fw:
-		free_page((unsigned long)kaweth->firmware_buf);
+		free_page(kaweth->firmware_buf);
 		free_netdev(netdev);
 		return -EIO;
 	}
diff --git a/drivers/net/wan/z85230.c b/drivers/net/wan/z85230.c
index 2f0bd69..514381b 100644
--- a/drivers/net/wan/z85230.c
+++ b/drivers/net/wan/z85230.c
@@ -887,7 +887,7 @@ int z8530_sync_dma_open(struct net_device *dev, struct z8530_channel *c)
 	c->tx_dma_buf[0]=(void *)get_zeroed_page(GFP_KERNEL|GFP_DMA);
 	if(c->tx_dma_buf[0]==NULL)
 	{
-		free_page((unsigned long)c->rx_buf[0]);
+		free_page(c->rx_buf[0]);
 		c->rx_buf[0]=NULL;
 		return -ENOBUFS;
 	}
@@ -1020,12 +1020,12 @@ int z8530_sync_dma_close(struct net_device *dev, struct z8530_channel *c)
 	
 	if(c->rx_buf[0])
 	{
-		free_page((unsigned long)c->rx_buf[0]);
+		free_page(c->rx_buf[0]);
 		c->rx_buf[0]=NULL;
 	}
 	if(c->tx_dma_buf[0])
 	{
-		free_page((unsigned  long)c->tx_dma_buf[0]);
+		free_page(c->tx_dma_buf[0]);
 		c->tx_dma_buf[0]=NULL;
 	}
 	chk=read_zsreg(c,R0);
@@ -1189,7 +1189,7 @@ int z8530_sync_txdma_close(struct net_device *dev, struct z8530_channel *c)
 	
 	if(c->tx_dma_buf[0])
 	{
-		free_page((unsigned long)c->tx_dma_buf[0]);
+		free_page(c->tx_dma_buf[0]);
 		c->tx_dma_buf[0]=NULL;
 	}
 	chk=read_zsreg(c,R0);
diff --git a/drivers/net/wireless/b43/debugfs.c b/drivers/net/wireless/b43/debugfs.c
index b4bcd94..260de71 100644
--- a/drivers/net/wireless/b43/debugfs.c
+++ b/drivers/net/wireless/b43/debugfs.c
@@ -605,7 +605,7 @@ static ssize_t b43_debugfs_write(struct file *file,
 		goto out_freepage;
 
 out_freepage:
-	free_page((unsigned long)buf);
+	free_page(buf);
 out_unlock:
 	mutex_unlock(&dev->wl->mutex);
 
diff --git a/drivers/net/wireless/b43legacy/debugfs.c b/drivers/net/wireless/b43legacy/debugfs.c
index 090910e..947a823 100644
--- a/drivers/net/wireless/b43legacy/debugfs.c
+++ b/drivers/net/wireless/b43legacy/debugfs.c
@@ -312,7 +312,7 @@ static ssize_t b43legacy_debugfs_write(struct file *file,
 		goto out_freepage;
 
 out_freepage:
-	free_page((unsigned long)buf);
+	free_page(buf);
 out_unlock:
 	mutex_unlock(&dev->wl->mutex);
 
diff --git a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wireless/libertas/debugfs.c
index 26cbf1d..f79c11f 100644
--- a/drivers/net/wireless/libertas/debugfs.c
+++ b/drivers/net/wireless/libertas/debugfs.c
@@ -47,7 +47,7 @@ static ssize_t lbs_dev_info(struct file *file, char __user *userbuf,
 
 	res = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
 
-	free_page(addr);
+	free_page((void *)addr);
 	return res;
 }
 
@@ -88,7 +88,7 @@ static ssize_t lbs_sleepparams_write(struct file *file,
 		ret = -EINVAL;
 
 out_unlock:
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
@@ -116,7 +116,7 @@ static ssize_t lbs_sleepparams_read(struct file *file, char __user *userbuf,
 	ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
 
 out_unlock:
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
@@ -162,7 +162,7 @@ static ssize_t lbs_host_sleep_write(struct file *file,
 		ret = count;
 
 out_unlock:
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
@@ -181,7 +181,7 @@ static ssize_t lbs_host_sleep_read(struct file *file, char __user *userbuf,
 
 	ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
 
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
@@ -268,7 +268,7 @@ static ssize_t lbs_threshold_read(uint16_t tlv_type, uint16_t event_mask,
 	kfree(subscribed);
 
  out_page:
-	free_page((unsigned long)buf);
+	free_page(buf);
 	return ret;
 }
 
@@ -343,7 +343,7 @@ static ssize_t lbs_threshold_write(uint16_t tlv_type, uint16_t event_mask,
  out_events:
 	kfree(events);
  out_page:
-	free_page((unsigned long)buf);
+	free_page(buf);
 	return ret;
 }
 
@@ -463,7 +463,7 @@ static ssize_t lbs_rdmac_read(struct file *file, char __user *userbuf,
 				priv->mac_offset, val);
 		ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
 	}
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
@@ -486,7 +486,7 @@ static ssize_t lbs_rdmac_write(struct file *file,
 	priv->mac_offset = simple_strtoul(buf, NULL, 16);
 	res = count;
 out_unlock:
-	free_page(addr);
+	free_page((void *)addr);
 	return res;
 }
 
@@ -520,7 +520,7 @@ static ssize_t lbs_wrmac_write(struct file *file,
 	if (!res)
 		res = count;
 out_unlock:
-	free_page(addr);
+	free_page((void *)addr);
 	return res;
 }
 
@@ -544,7 +544,7 @@ static ssize_t lbs_rdbbp_read(struct file *file, char __user *userbuf,
 				priv->bbp_offset, val);
 		ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
 	}
-	free_page(addr);
+	free_page((void *)addr);
 
 	return ret;
 }
@@ -568,7 +568,7 @@ static ssize_t lbs_rdbbp_write(struct file *file,
 	priv->bbp_offset = simple_strtoul(buf, NULL, 16);
 	res = count;
 out_unlock:
-	free_page(addr);
+	free_page((void *)addr);
 	return res;
 }
 
@@ -602,7 +602,7 @@ static ssize_t lbs_wrbbp_write(struct file *file,
 	if (!res)
 		res = count;
 out_unlock:
-	free_page(addr);
+	free_page((void *)addr);
 	return res;
 }
 
@@ -626,7 +626,7 @@ static ssize_t lbs_rdrf_read(struct file *file, char __user *userbuf,
 				priv->rf_offset, val);
 		ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
 	}
-	free_page(addr);
+	free_page((void *)addr);
 
 	return ret;
 }
@@ -650,7 +650,7 @@ static ssize_t lbs_rdrf_write(struct file *file,
 	priv->rf_offset = simple_strtoul(buf, NULL, 16);
 	res = count;
 out_unlock:
-	free_page(addr);
+	free_page((void *)addr);
 	return res;
 }
 
@@ -684,7 +684,7 @@ static ssize_t lbs_wrrf_write(struct file *file,
 	if (!res)
 		res = count;
 out_unlock:
-	free_page(addr);
+	free_page((void *)addr);
 	return res;
 }
 
@@ -887,7 +887,7 @@ static ssize_t lbs_debugfs_read(struct file *file, char __user *userbuf,
 
 	res = simple_read_from_buffer(userbuf, count, ppos, p, pos);
 
-	free_page(addr);
+	free_page((void *)addr);
 	return res;
 }
 
diff --git a/drivers/net/wireless/mwifiex/debugfs.c b/drivers/net/wireless/mwifiex/debugfs.c
index 9824d8d..4ed3dba 100644
--- a/drivers/net/wireless/mwifiex/debugfs.c
+++ b/drivers/net/wireless/mwifiex/debugfs.c
@@ -147,7 +147,7 @@ mwifiex_info_read(struct file *file, char __user *ubuf,
 				      (unsigned long) p - page);
 
 free_and_exit:
-	free_page(page);
+	free_page((void *)page);
 	return ret;
 }
 
@@ -257,7 +257,7 @@ mwifiex_getlog_read(struct file *file, char __user *ubuf,
 				      (unsigned long) p - page);
 
 free_and_exit:
-	free_page(page);
+	free_page((void *)page);
 	return ret;
 }
 
@@ -430,7 +430,7 @@ mwifiex_debug_read(struct file *file, char __user *ubuf,
 				      (unsigned long) p - page);
 
 free_and_exit:
-	free_page(page);
+	free_page((void *)page);
 	return ret;
 }
 
@@ -474,7 +474,7 @@ mwifiex_regrdwr_write(struct file *file,
 		ret = count;
 	}
 done:
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
@@ -531,7 +531,7 @@ mwifiex_regrdwr_read(struct file *file, char __user *ubuf,
 	ret = simple_read_from_buffer(ubuf, count, ppos, buf, pos);
 
 done:
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
@@ -557,7 +557,7 @@ mwifiex_debug_mask_read(struct file *file, char __user *ubuf,
 			priv->adapter->debug_mask);
 	ret = simple_read_from_buffer(ubuf, count, ppos, buf, pos);
 
-	free_page(page);
+	free_page((void *)page);
 	return ret;
 }
 
@@ -592,7 +592,7 @@ mwifiex_debug_mask_write(struct file *file, const char __user *ubuf,
 	priv->adapter->debug_mask = debug_mask;
 	ret = count;
 done:
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
@@ -645,7 +645,7 @@ mwifiex_memrw_write(struct file *file, const char __user *ubuf, size_t count,
 		ret = count;
 
 done:
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
@@ -669,7 +669,7 @@ mwifiex_memrw_read(struct file *file, char __user *ubuf,
 			priv->mem_rw.value);
 	ret = simple_read_from_buffer(ubuf, count, ppos, buf, pos);
 
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
@@ -712,7 +712,7 @@ mwifiex_rdeeprom_write(struct file *file,
 		ret = count;
 	}
 done:
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
@@ -759,7 +759,7 @@ mwifiex_rdeeprom_read(struct file *file, char __user *ubuf,
 done:
 	ret = simple_read_from_buffer(ubuf, count, ppos, buf, pos);
 out_free:
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
@@ -823,7 +823,7 @@ mwifiex_hscfg_write(struct file *file, const char __user *ubuf,
 	priv->adapter->hs_enabling = false;
 	ret = count;
 done:
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
@@ -852,7 +852,7 @@ mwifiex_hscfg_read(struct file *file, char __user *ubuf,
 
 	ret = simple_read_from_buffer(ubuf, count, ppos, buf, pos);
 
-	free_page(addr);
+	free_page((void *)addr);
 	return ret;
 }
 
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
index ec7f6af..25defe4 100644
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -6348,7 +6348,7 @@ err_mbox:
 	kfree(wl->mbox);
 
 err_fwlog:
-	free_page((unsigned long)wl->fwlog);
+	free_page(wl->fwlog);
 
 err_dummy_packet:
 	dev_kfree_skb(wl->dummy_packet);
@@ -6384,7 +6384,7 @@ int wlcore_free_hw(struct wl1271 *wl)
 
 	kfree(wl->buffer_32);
 	kfree(wl->mbox);
-	free_page((unsigned long)wl->fwlog);
+	free_page(wl->fwlog);
 	dev_kfree_skb(wl->dummy_packet);
 	free_pages((unsigned long)wl->aggr_buf, get_order(wl->aggr_buf_size));
 
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index d6abf19..0f9b7cf 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -1587,11 +1587,11 @@ static int setup_netfront(struct xenbus_device *dev,
 alloc_evtchn_fail:
 	gnttab_end_foreign_access_ref(queue->rx_ring_ref, 0);
 grant_rx_ring_fail:
-	free_page((unsigned long)rxs);
+	free_page(rxs);
 alloc_rx_ring_fail:
 	gnttab_end_foreign_access_ref(queue->tx_ring_ref, 0);
 grant_tx_ring_fail:
-	free_page((unsigned long)txs);
+	free_page(txs);
 fail:
 	return err;
 }
diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
index c777b97..85f69e5 100644
--- a/drivers/pci/xen-pcifront.c
+++ b/drivers/pci/xen-pcifront.c
@@ -774,7 +774,7 @@ static void free_pdev(struct pcifront_device *pdev)
 		gnttab_end_foreign_access(pdev->gnt_ref, 0 /* r/w page */,
 					  (unsigned long)pdev->sh_info);
 	else
-		free_page((unsigned long)pdev->sh_info);
+		free_page(pdev->sh_info);
 
 	dev_set_drvdata(&pdev->xdev->dev, NULL);
 
diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
index aaeeae8..996839f 100644
--- a/drivers/platform/x86/dell-laptop.c
+++ b/drivers/platform/x86/dell-laptop.c
@@ -2208,7 +2208,7 @@ static int __init dell_init(void)
 fail_backlight:
 	dell_cleanup_rfkill();
 fail_rfkill:
-	free_page((unsigned long)buffer);
+	free_page(buffer);
 fail_buffer:
 	platform_device_del(platform_device);
 fail_platform_device2:
@@ -2233,7 +2233,7 @@ static void __exit dell_exit(void)
 		platform_driver_unregister(&platform_driver);
 	}
 	kfree(da_tokens);
-	free_page((unsigned long)buffer);
+	free_page(buffer);
 }
 
 /* dell-rbtn.c driver export functions which will not work correctly (and could
diff --git a/drivers/power/power_supply_sysfs.c b/drivers/power/power_supply_sysfs.c
index ed2d7fd..e0063c5 100644
--- a/drivers/power/power_supply_sysfs.c
+++ b/drivers/power/power_supply_sysfs.c
@@ -330,7 +330,7 @@ int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env)
 	}
 
 out:
-	free_page((unsigned long)prop_buf);
+	free_page(prop_buf);
 
 	return ret;
 }
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index a263c10..5257c80 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -136,8 +136,8 @@ struct dasd_device *dasd_alloc_device(void)
 void dasd_free_device(struct dasd_device *device)
 {
 	kfree(device->private);
-	free_page((unsigned long) device->erp_mem);
-	free_pages((unsigned long) device->ccw_mem, 1);
+	free_page(device->erp_mem);
+	free_pages((unsigned long)device->ccw_mem, 1);
 	kfree(device);
 }
 
diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c
index cb61f30..f5746ad 100644
--- a/drivers/s390/block/dasd_diag.c
+++ b/drivers/s390/block/dasd_diag.c
@@ -460,7 +460,7 @@ dasd_diag_check_device(struct dasd_device *device)
 		rc = 0;
 	}
 out_label:
-	free_page((long) label);
+	free_page(label);
 out:
 	if (rc) {
 		device->block = NULL;
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index 9083247..c2d120a 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -4270,7 +4270,7 @@ static void dasd_eckd_dump_sense_ccw(struct dasd_device *device,
 		if (len > 0)
 			printk(KERN_ERR "%s", page);
 	}
-	free_page((unsigned long) page);
+	free_page(page);
 }
 
 
@@ -4403,7 +4403,7 @@ static void dasd_eckd_dump_sense_tcw(struct dasd_device *device,
 			" SORRY - NO TSB DATA AVAILABLE\n");
 	}
 	printk(KERN_ERR "%s", page);
-	free_page((unsigned long) page);
+	free_page(page);
 }
 
 static void dasd_eckd_dump_sense(struct dasd_device *device,
@@ -5130,7 +5130,7 @@ dasd_eckd_init(void)
 	else {
 		kfree(path_verification_worker);
 		kfree(dasd_reserve_req);
-		free_page((unsigned long)rawpadpage);
+		free_page(rawpadpage);
 	}
 	return ret;
 }
@@ -5141,7 +5141,7 @@ dasd_eckd_cleanup(void)
 	ccw_driver_unregister(&dasd_eckd_driver);
 	kfree(path_verification_worker);
 	kfree(dasd_reserve_req);
-	free_page((unsigned long)rawpadpage);
+	free_page(rawpadpage);
 }
 
 module_init(dasd_eckd_init);
diff --git a/drivers/s390/block/dasd_eer.c b/drivers/s390/block/dasd_eer.c
index 21ef63c..6cab911 100644
--- a/drivers/s390/block/dasd_eer.c
+++ b/drivers/s390/block/dasd_eer.c
@@ -216,7 +216,7 @@ static void dasd_eer_free_buffer_pages(char **buf, int no_pages)
 	int i;
 
 	for (i = 0; i < no_pages; i++)
-		free_page((unsigned long) buf[i]);
+		free_page(buf[i]);
 }
 
 /*
diff --git a/drivers/s390/block/dasd_fba.c b/drivers/s390/block/dasd_fba.c
index c9262e7..0b69bad 100644
--- a/drivers/s390/block/dasd_fba.c
+++ b/drivers/s390/block/dasd_fba.c
@@ -571,7 +571,7 @@ dasd_fba_dump_sense(struct dasd_device *device, struct dasd_ccw_req * req,
 	}
 	if (len > 0)
 		printk(KERN_ERR "%s", page);
-	free_page((unsigned long) page);
+	free_page(page);
 }
 
 /*
diff --git a/drivers/s390/block/scm_blk.c b/drivers/s390/block/scm_blk.c
index 75d9896..146a3ae 100644
--- a/drivers/s390/block/scm_blk.c
+++ b/drivers/s390/block/scm_blk.c
@@ -41,7 +41,7 @@ static void __scm_free_rq(struct scm_request *scmrq)
 {
 	struct aob_rq_header *aobrq = to_aobrq(scmrq);
 
-	free_page((unsigned long) scmrq->aob);
+	free_page(scmrq->aob);
 	__scm_free_rq_cluster(scmrq);
 	kfree(scmrq->request);
 	kfree(aobrq);
diff --git a/drivers/s390/block/scm_blk_cluster.c b/drivers/s390/block/scm_blk_cluster.c
index 7497ddd..65952f7 100644
--- a/drivers/s390/block/scm_blk_cluster.c
+++ b/drivers/s390/block/scm_blk_cluster.c
@@ -29,7 +29,7 @@ void __scm_free_rq_cluster(struct scm_request *scmrq)
 		return;
 
 	for (i = 0; i < 2 * write_cluster_size; i++)
-		free_page((unsigned long) scmrq->cluster.buf[i]);
+		free_page(scmrq->cluster.buf[i]);
 
 	kfree(scmrq->cluster.buf);
 }
diff --git a/drivers/s390/block/xpram.c b/drivers/s390/block/xpram.c
index 288f59a..542c6d0 100644
--- a/drivers/s390/block/xpram.c
+++ b/drivers/s390/block/xpram.c
@@ -149,7 +149,7 @@ static int xpram_present(void)
 	if (!mem_page)
 		return -ENOMEM;
 	rc = xpram_page_in(mem_page, 0);
-	free_page(mem_page);
+	free_page((void *)mem_page);
 	return rc ? -ENXIO : 0;
 }
 
@@ -173,7 +173,7 @@ static unsigned long xpram_highest_page_index(void)
 		add_bit >>= 1;
 	}
 
-	free_page (mem_page);
+	free_page((void *)mem_page);
 
 	return page_index;
 }
diff --git a/drivers/s390/char/diag_ftp.c b/drivers/s390/char/diag_ftp.c
index a5ccbf6..d110a32 100644
--- a/drivers/s390/char/diag_ftp.c
+++ b/drivers/s390/char/diag_ftp.c
@@ -207,7 +207,7 @@ ssize_t diag_ftp_cmd(const struct hmcdrv_ftp_cmdspec *ftp, size_t *fsize)
 	}
 
 out_free:
-	free_page((unsigned long) ldfpl);
+	free_page(ldfpl);
 out:
 	return len;
 }
diff --git a/drivers/s390/char/hmcdrv_ftp.c b/drivers/s390/char/hmcdrv_ftp.c
index d4b61d9..d8a07bb 100644
--- a/drivers/s390/char/hmcdrv_ftp.c
+++ b/drivers/s390/char/hmcdrv_ftp.c
@@ -216,7 +216,7 @@ int hmcdrv_ftp_probe(void)
 		break;
 	} /* switch */
 out:
-	free_page((unsigned long) ftp.buf);
+	free_page(ftp.buf);
 	return rc;
 }
 EXPORT_SYMBOL(hmcdrv_ftp_probe);
diff --git a/drivers/s390/char/sclp_async.c b/drivers/s390/char/sclp_async.c
index 19c2542..bc029d6 100644
--- a/drivers/s390/char/sclp_async.c
+++ b/drivers/s390/char/sclp_async.c
@@ -186,7 +186,7 @@ static int __init sclp_async_init(void)
 		goto out;
 out_mem:
 	kfree(request);
-	free_page((unsigned long) sccb);
+	free_page(sccb);
 	unregister_sysctl_table(callhome_sysctl_header);
 out_sclp:
 	sclp_unregister(&sclp_async_register);
@@ -201,7 +201,7 @@ static void __exit sclp_async_exit(void)
 					 &call_home_panic_nb);
 	unregister_sysctl_table(callhome_sysctl_header);
 	sclp_unregister(&sclp_async_register);
-	free_page((unsigned long) sccb);
+	free_page(sccb);
 	kfree(request);
 }
 module_exit(sclp_async_exit);
diff --git a/drivers/s390/char/sclp_cmd.c b/drivers/s390/char/sclp_cmd.c
index 806239c..09b6c07 100644
--- a/drivers/s390/char/sclp_cmd.c
+++ b/drivers/s390/char/sclp_cmd.c
@@ -129,7 +129,7 @@ int sclp_get_core_info(struct sclp_core_info *info)
 	}
 	sclp_fill_core_info(info, sccb);
 out:
-	free_page((unsigned long) sccb);
+	free_page(sccb);
 	return rc;
 }
 
@@ -237,7 +237,7 @@ static int do_assign_storage(sclp_cmdw_t cmd, u16 rn)
 		break;
 	}
 out:
-	free_page((unsigned long) sccb);
+	free_page(sccb);
 	return rc;
 }
 
@@ -294,7 +294,7 @@ static int sclp_attach_storage(u8 id)
 		break;
 	}
 out:
-	free_page((unsigned long) sccb);
+	free_page(sccb);
 	return rc;
 }
 
@@ -570,7 +570,7 @@ static int __init sclp_detect_standby_memory(void)
 out_driver:
 	platform_driver_unregister(&sclp_mem_pdrv);
 out:
-	free_page((unsigned long) sccb);
+	free_page(sccb);
 	return rc;
 }
 __initcall(sclp_detect_standby_memory);
@@ -622,7 +622,7 @@ static int do_pci_configure(sclp_cmdw_t cmd, u32 fid)
 		break;
 	}
 out:
-	free_page((unsigned long) sccb);
+	free_page(sccb);
 	return rc;
 }
 
@@ -682,7 +682,7 @@ static int do_chp_configure(sclp_cmdw_t cmd)
 		break;
 	}
 out:
-	free_page((unsigned long) sccb);
+	free_page(sccb);
 	return rc;
 }
 
@@ -753,6 +753,6 @@ int sclp_chp_read_info(struct sclp_chp_info *info)
 	memcpy(info->standby, sccb->standby, SCLP_CHP_INFO_MASK_SIZE);
 	memcpy(info->configured, sccb->configured, SCLP_CHP_INFO_MASK_SIZE);
 out:
-	free_page((unsigned long) sccb);
+	free_page(sccb);
 	return rc;
 }
diff --git a/drivers/s390/char/sclp_cpi_sys.c b/drivers/s390/char/sclp_cpi_sys.c
index 2acea80..9895146 100644
--- a/drivers/s390/char/sclp_cpi_sys.c
+++ b/drivers/s390/char/sclp_cpi_sys.c
@@ -118,7 +118,7 @@ static struct sclp_req *cpi_prepare_req(void)
 
 static void cpi_free_req(struct sclp_req *req)
 {
-	free_page((unsigned long) req->sccb);
+	free_page(req->sccb);
 	kfree(req);
 }
 
diff --git a/drivers/s390/char/sclp_ctl.c b/drivers/s390/char/sclp_ctl.c
index 648cb86..8b90112 100644
--- a/drivers/s390/char/sclp_ctl.c
+++ b/drivers/s390/char/sclp_ctl.c
@@ -81,7 +81,7 @@ static int sclp_ctl_ioctl_sccb(void __user *user_area)
 	if (copy_to_user(u64_to_uptr(ctl_sccb.sccb), sccb, sccb->length))
 		rc = -EFAULT;
 out_free:
-	free_page((unsigned long) sccb);
+	free_page(sccb);
 	return rc;
 }
 
diff --git a/drivers/s390/char/sclp_ftp.c b/drivers/s390/char/sclp_ftp.c
index 6561cc5..66bf759 100644
--- a/drivers/s390/char/sclp_ftp.c
+++ b/drivers/s390/char/sclp_ftp.c
@@ -152,7 +152,7 @@ static int sclp_ftp_et7(const struct hmcdrv_ftp_cmdspec *ftp)
 	}
 
 out_free:
-	free_page((unsigned long) sccb);
+	free_page(sccb);
 	kfree(req);
 	return rc;
 }
@@ -260,7 +260,7 @@ int sclp_ftp_startup(void)
 				 info222->lpar_number, info222->name);
 		}
 
-		free_page(info);
+		free_page((void *)info);
 	}
 #endif	/* DEBUG */
 	return 0;
diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c
index 68d6ee7..373d280 100644
--- a/drivers/s390/char/sclp_vt220.c
+++ b/drivers/s390/char/sclp_vt220.c
@@ -668,7 +668,7 @@ static void __init __sclp_vt220_free_pages(void)
 
 	list_for_each_safe(page, p, &sclp_vt220_empty) {
 		list_del(page);
-		free_page((unsigned long) page);
+		free_page(page);
 	}
 }
 
diff --git a/drivers/s390/char/vmlogrdr.c b/drivers/s390/char/vmlogrdr.c
index 799c152..a42ef55 100644
--- a/drivers/s390/char/vmlogrdr.c
+++ b/drivers/s390/char/vmlogrdr.c
@@ -839,7 +839,7 @@ static void vmlogrdr_cleanup(void)
 	}
 	for (i=0; i < MAXMINOR; ++i ) {
 		vmlogrdr_unregister_device(&sys_ser[i]);
-		free_page((unsigned long)sys_ser[i].buffer);
+		free_page(sys_ser[i].buffer);
 	}
 	vmlogrdr_unregister_driver();
 	if (vmlogrdr_major) {
diff --git a/drivers/s390/char/vmur.c b/drivers/s390/char/vmur.c
index 0efb27f..3974f34 100644
--- a/drivers/s390/char/vmur.c
+++ b/drivers/s390/char/vmur.c
@@ -551,7 +551,7 @@ static ssize_t diag14_read(struct file *file, char __user *ubuf, size_t count,
 	*offs += copied;
 	rc = copied;
 fail:
-	free_page((unsigned long) buf);
+	free_page(buf);
 	return rc;
 }
 
@@ -636,7 +636,7 @@ static int verify_uri_device(struct urdev *urd)
 	rc = 0;
 
 fail_free_buf:
-	free_page((unsigned long) buf);
+	free_page(buf);
 fail_free_fcb:
 	kfree(fcb);
 	return rc;
diff --git a/drivers/s390/char/zcore.c b/drivers/s390/char/zcore.c
index 823f41f..4a6f730 100644
--- a/drivers/s390/char/zcore.c
+++ b/drivers/s390/char/zcore.c
@@ -626,7 +626,7 @@ static int __init zcore_reipl_init(void)
 	if (rc || csum_partial(ipl_block, ipl_block->hdr.len, 0) !=
 	    ipib_info.checksum) {
 		TRACE("Checksum does not match\n");
-		free_page((unsigned long) ipl_block);
+		free_page(ipl_block);
 		ipl_block = NULL;
 	}
 	return 0;
@@ -733,7 +733,7 @@ static void __exit zcore_exit(void)
 {
 	debug_unregister(zcore_dbf);
 	sclp_sdias_exit();
-	free_page((unsigned long) ipl_block);
+	free_page(ipl_block);
 	debugfs_remove(zcore_hsa_file);
 	debugfs_remove(zcore_reipl_file);
 	debugfs_remove(zcore_memmap_file);
diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c
index a831d18..e7640e4 100644
--- a/drivers/s390/cio/chsc.c
+++ b/drivers/s390/cio/chsc.c
@@ -864,8 +864,8 @@ chsc_secm(struct channel_subsystem *css, int enable)
 		css->cub_addr1 = (void *)get_zeroed_page(GFP_KERNEL | GFP_DMA);
 		css->cub_addr2 = (void *)get_zeroed_page(GFP_KERNEL | GFP_DMA);
 		if (!css->cub_addr1 || !css->cub_addr2) {
-			free_page((unsigned long)css->cub_addr1);
-			free_page((unsigned long)css->cub_addr2);
+			free_page(css->cub_addr1);
+			free_page(css->cub_addr2);
 			return -ENOMEM;
 		}
 	}
@@ -882,8 +882,8 @@ chsc_secm(struct channel_subsystem *css, int enable)
 			chsc_remove_cmg_attr(css);
 	}
 	if (!css->cm_enabled) {
-		free_page((unsigned long)css->cub_addr1);
-		free_page((unsigned long)css->cub_addr2);
+		free_page(css->cub_addr1);
+		free_page(css->cub_addr2);
 	}
 	return ret;
 }
@@ -1068,16 +1068,16 @@ int __init chsc_init(void)
 		goto out_err;
 	return ret;
 out_err:
-	free_page((unsigned long)chsc_page);
-	free_page((unsigned long)sei_page);
+	free_page(chsc_page);
+	free_page(sei_page);
 	return ret;
 }
 
 void __init chsc_init_cleanup(void)
 {
 	crw_unregister_handler(CRW_RSC_CSS);
-	free_page((unsigned long)chsc_page);
-	free_page((unsigned long)sei_page);
+	free_page(chsc_page);
+	free_page(sei_page);
 }
 
 int __chsc_enable_facility(struct chsc_sda_area *sda_area, int operation_code)
diff --git a/drivers/s390/cio/chsc_sch.c b/drivers/s390/cio/chsc_sch.c
index 213159d..41ee3da 100644
--- a/drivers/s390/cio/chsc_sch.c
+++ b/drivers/s390/cio/chsc_sch.c
@@ -361,7 +361,7 @@ out_free:
 	snprintf(dbf, sizeof(dbf), "ret:%d", ret);
 	CHSC_LOG(0, dbf);
 	kfree(request);
-	free_page((unsigned long)chsc_area);
+	free_page(chsc_area);
 	return ret;
 }
 
@@ -393,7 +393,7 @@ static int chsc_ioctl_on_close_set(void __user *user_area)
 	goto out_unlock;
 
 out_free_chsc:
-	free_page((unsigned long)on_close_chsc_area);
+	free_page(on_close_chsc_area);
 	on_close_chsc_area = NULL;
 out_free_request:
 	kfree(on_close_request);
@@ -415,7 +415,7 @@ static int chsc_ioctl_on_close_remove(void)
 		ret = -ENOENT;
 		goto out_unlock;
 	}
-	free_page((unsigned long)on_close_chsc_area);
+	free_page(on_close_chsc_area);
 	on_close_chsc_area = NULL;
 	kfree(on_close_request);
 	on_close_request = NULL;
@@ -454,7 +454,7 @@ static int chsc_ioctl_start_sync(void __user *user_area)
 	else
 		ret = 0;
 out_free:
-	free_page((unsigned long)chsc_area);
+	free_page(chsc_area);
 	return ret;
 }
 
@@ -516,7 +516,7 @@ static int chsc_ioctl_info_channel_path(void __user *user_cd)
 		ret = 0;
 out_free:
 	kfree(cd);
-	free_page((unsigned long)scpcd_area);
+	free_page(scpcd_area);
 	return ret;
 }
 
@@ -578,7 +578,7 @@ static int chsc_ioctl_info_cu(void __user *user_cd)
 		ret = 0;
 out_free:
 	kfree(cd);
-	free_page((unsigned long)scucd_area);
+	free_page(scucd_area);
 	return ret;
 }
 
@@ -642,7 +642,7 @@ static int chsc_ioctl_info_sch_cu(void __user *user_cud)
 		ret = 0;
 out_free:
 	kfree(cud);
-	free_page((unsigned long)sscud_area);
+	free_page(sscud_area);
 	return ret;
 }
 
@@ -702,7 +702,7 @@ static int chsc_ioctl_conf_info(void __user *user_ci)
 		ret = 0;
 out_free:
 	kfree(ci);
-	free_page((unsigned long)sci_area);
+	free_page(sci_area);
 	return ret;
 }
 
@@ -785,7 +785,7 @@ static int chsc_ioctl_conf_comp_list(void __user *user_ccl)
 		ret = 0;
 out_free:
 	kfree(ccl);
-	free_page((unsigned long)sccl_area);
+	free_page(sccl_area);
 	return ret;
 }
 
@@ -815,7 +815,7 @@ static int chsc_ioctl_chpd(void __user *user_chpd)
 		ret = -EFAULT;
 out_free:
 	kfree(chpd);
-	free_page((unsigned long)scpd_area);
+	free_page(scpd_area);
 	return ret;
 }
 
@@ -874,7 +874,7 @@ static int chsc_ioctl_dcal(void __user *user_dcal)
 		ret = 0;
 out_free:
 	kfree(dcal);
-	free_page((unsigned long)sdcal_area);
+	free_page(sdcal_area);
 	return ret;
 }
 
@@ -947,7 +947,7 @@ static int chsc_release(struct inode *inode, struct file *filp)
 	}
 	snprintf(dbf, sizeof(dbf), "relret:%d", ret);
 	CHSC_LOG(0, dbf);
-	free_page((unsigned long)on_close_chsc_area);
+	free_page(on_close_chsc_area);
 	on_close_chsc_area = NULL;
 	kfree(on_close_request);
 	on_close_request = NULL;
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
index 4bb5262..86c4599 100644
--- a/drivers/s390/cio/qdio_main.c
+++ b/drivers/s390/cio/qdio_main.c
@@ -1836,7 +1836,7 @@ int qdio_pnso_brinfo(struct subchannel_id schid,
 	(*response) = rr->response.code;
 
 out:
-	free_page((unsigned long)rr);
+	free_page(rr);
 	return rc;
 }
 EXPORT_SYMBOL_GPL(qdio_pnso_brinfo);
diff --git a/drivers/s390/cio/qdio_setup.c b/drivers/s390/cio/qdio_setup.c
index 48b3866..637d1a8 100644
--- a/drivers/s390/cio/qdio_setup.c
+++ b/drivers/s390/cio/qdio_setup.c
@@ -44,7 +44,7 @@ void qdio_free_buffers(struct qdio_buffer **buf, unsigned int count)
 	int pos;
 
 	for (pos = 0; pos < count; pos += QBUFF_PER_PAGE)
-		free_page((unsigned long) buf[pos]);
+		free_page(buf[pos]);
 }
 EXPORT_SYMBOL_GPL(qdio_free_buffers);
 
@@ -326,7 +326,7 @@ int qdio_setup_get_ssqd(struct qdio_irq *irq_ptr,
 
 out:
 	if (!irq_ptr)
-		free_page((unsigned long)ssqd);
+		free_page(ssqd);
 
 	return rc;
 }
@@ -364,7 +364,7 @@ void qdio_release_memory(struct qdio_irq *irq_ptr)
 	for (i = 0; i < QDIO_MAX_QUEUES_PER_IRQ; i++) {
 		q = irq_ptr->input_qs[i];
 		if (q) {
-			free_page((unsigned long) q->slib);
+			free_page(q->slib);
 			kmem_cache_free(qdio_q_cache, q);
 		}
 	}
@@ -384,13 +384,13 @@ void qdio_release_memory(struct qdio_irq *irq_ptr)
 
 				qdio_disable_async_operation(&q->u.out);
 			}
-			free_page((unsigned long) q->slib);
+			free_page(q->slib);
 			kmem_cache_free(qdio_q_cache, q);
 		}
 	}
-	free_page((unsigned long) irq_ptr->qdr);
-	free_page(irq_ptr->chsc_page);
-	free_page((unsigned long) irq_ptr);
+	free_page(irq_ptr->qdr);
+	free_page((void *)irq_ptr->chsc_page);
+	free_page(irq_ptr);
 }
 
 static void __qdio_allocate_fill_qdr(struct qdio_irq *irq_ptr,
diff --git a/drivers/s390/cio/scm.c b/drivers/s390/cio/scm.c
index 15268ed..db1812e 100644
--- a/drivers/s390/cio/scm.c
+++ b/drivers/s390/cio/scm.c
@@ -247,7 +247,7 @@ int scm_update_information(void)
 		token = scm_info->restok;
 	} while (token);
 
-	free_page((unsigned long)scm_info);
+	free_page(scm_info);
 
 	return ret;
 }
diff --git a/drivers/s390/crypto/zcrypt_api.c b/drivers/s390/crypto/zcrypt_api.c
index 9f8fa42..0d6b831 100644
--- a/drivers/s390/crypto/zcrypt_api.c
+++ b/drivers/s390/crypto/zcrypt_api.c
@@ -1393,7 +1393,7 @@ static int zcrypt_rng_device_add(void)
 	return 0;
 
 out_free:
-	free_page((unsigned long) zcrypt_rng_buffer);
+	free_page(zcrypt_rng_buffer);
 out:
 	mutex_unlock(&zcrypt_rng_mutex);
 	return rc;
@@ -1405,7 +1405,7 @@ static void zcrypt_rng_device_remove(void)
 	zcrypt_rng_device_count--;
 	if (zcrypt_rng_device_count == 0) {
 		hwrng_unregister(&zcrypt_rng_dev);
-		free_page((unsigned long) zcrypt_rng_buffer);
+		free_page(zcrypt_rng_buffer);
 	}
 	mutex_unlock(&zcrypt_rng_mutex);
 }
diff --git a/drivers/s390/crypto/zcrypt_msgtype6.c b/drivers/s390/crypto/zcrypt_msgtype6.c
index 9a2dd47..6c6a435 100644
--- a/drivers/s390/crypto/zcrypt_msgtype6.c
+++ b/drivers/s390/crypto/zcrypt_msgtype6.c
@@ -941,7 +941,7 @@ static long zcrypt_msgtype6_modexpo(struct zcrypt_device *zdev,
 		/* Signal pending. */
 		ap_cancel_message(zdev->ap_dev, &ap_msg);
 out_free:
-	free_page((unsigned long) ap_msg.message);
+	free_page(ap_msg.message);
 	return rc;
 }
 
@@ -985,7 +985,7 @@ static long zcrypt_msgtype6_modexpo_crt(struct zcrypt_device *zdev,
 		/* Signal pending. */
 		ap_cancel_message(zdev->ap_dev, &ap_msg);
 out_free:
-	free_page((unsigned long) ap_msg.message);
+	free_page(ap_msg.message);
 	return rc;
 }
 
diff --git a/drivers/s390/crypto/zcrypt_pcixcc.c b/drivers/s390/crypto/zcrypt_pcixcc.c
index f418527..83e407f 100644
--- a/drivers/s390/crypto/zcrypt_pcixcc.c
+++ b/drivers/s390/crypto/zcrypt_pcixcc.c
@@ -200,7 +200,7 @@ static int zcrypt_pcixcc_mcl(struct ap_device *ap_dev)
 	else
 		rc = ZCRYPT_PCIXCC_MCL3;
 out_free:
-	free_page((unsigned long) reply);
+	free_page(reply);
 	return rc;
 }
 
@@ -253,7 +253,7 @@ static int zcrypt_pcixcc_rng_supported(struct ap_device *ap_dev)
 	else
 		rc = 0;
 out_free:
-	free_page((unsigned long) ap_msg.message);
+	free_page(ap_msg.message);
 	return rc;
 }
 
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index 31ac53f..c753f8f 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -268,8 +268,7 @@ static int qeth_alloc_buffer_pool(struct qeth_card *card)
 			ptr = (void *) __get_free_page(GFP_KERNEL);
 			if (!ptr) {
 				while (j > 0)
-					free_page((unsigned long)
-						  pool_entry->elements[--j]);
+					free_page(pool_entry->elements[--j]);
 				kfree(pool_entry);
 				qeth_free_buffer_pool(card);
 				return -ENOMEM;
@@ -1311,7 +1310,7 @@ static void qeth_free_buffer_pool(struct qeth_card *card)
 	list_for_each_entry_safe(pool_entry, tmp,
 				 &card->qdio.init_pool.entry_list, init_list){
 		for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i)
-			free_page((unsigned long)pool_entry->elements[i]);
+			free_page(pool_entry->elements[i]);
 		list_del(&pool_entry->init_list);
 		kfree(pool_entry);
 	}
@@ -2763,7 +2762,7 @@ static inline struct qeth_buffer_pool_entry *qeth_find_free_buffer_pool_entry(
 			if (!page) {
 				return NULL;
 			} else {
-				free_page((unsigned long)entry->elements[i]);
+				free_page(entry->elements[i]);
 				entry->elements[i] = page_address(page);
 				if (card->options.performance_stats)
 					card->perf_stats.sg_alloc_page_rx++;
@@ -3180,7 +3179,7 @@ static void qeth_get_trap_id(struct qeth_card *card, struct qeth_trap_id *tid)
 		EBCASC(info322->vm[0].name, sizeof(info322->vm[0].name));
 		memcpy(tid->vmname, info322->vm[0].name, sizeof(tid->vmname));
 	}
-	free_page(info);
+	free_page((void *)info);
 	return;
 }
 
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c
index c00ac46..a3671dba 100644
--- a/drivers/s390/scsi/zfcp_aux.c
+++ b/drivers/s390/scsi/zfcp_aux.c
@@ -550,7 +550,7 @@ void zfcp_sg_free_table(struct scatterlist *sg, int count)
 
 	for (i = 0; i < count; i++, sg++)
 		if (sg)
-			free_page((unsigned long) sg_virt(sg));
+			free_page(sg_virt(sg));
 		else
 			break;
 }
diff --git a/drivers/scsi/cxlflash/main.c b/drivers/scsi/cxlflash/main.c
index 1e5bf0c..b91d769 100644
--- a/drivers/scsi/cxlflash/main.c
+++ b/drivers/scsi/cxlflash/main.c
@@ -619,7 +619,7 @@ static void free_mem(struct cxlflash_cfg *cfg)
 		for (i = 0; i < CXLFLASH_NUM_CMDS; i++) {
 			buf = afu->cmd[i].buf;
 			if (!((u64)buf & (PAGE_SIZE - 1)))
-				free_page((ulong)buf);
+				free_page(buf);
 		}
 
 		free_pages((ulong)afu, get_order(sizeof(struct afu)));
diff --git a/drivers/scsi/cxlflash/superpipe.c b/drivers/scsi/cxlflash/superpipe.c
index cac2e6a..0083441 100644
--- a/drivers/scsi/cxlflash/superpipe.c
+++ b/drivers/scsi/cxlflash/superpipe.c
@@ -733,7 +733,7 @@ static void destroy_context(struct cxlflash_cfg *cfg,
 	}
 
 	/* Free memory associated with context */
-	free_page((ulong)ctxi->rht_start);
+	free_page(ctxi->rht_start);
 	kfree(ctxi->rht_needs_ws);
 	kfree(ctxi->rht_lun);
 	kfree(ctxi);
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
index 6aa317c..166d834 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -665,7 +665,7 @@ static void ibmvfc_release_crq_queue(struct ibmvfc_host *vhost)
 	vhost->state = IBMVFC_NO_CRQ;
 	vhost->logged_in = 0;
 	dma_unmap_single(vhost->dev, crq->msg_token, PAGE_SIZE, DMA_BIDIRECTIONAL);
-	free_page((unsigned long)crq->msgs);
+	free_page(crq->msgs);
 }
 
 /**
@@ -4565,7 +4565,7 @@ req_irq_failed:
 reg_crq_failed:
 	dma_unmap_single(dev, crq->msg_token, PAGE_SIZE, DMA_BIDIRECTIONAL);
 map_failed:
-	free_page((unsigned long)crq->msgs);
+	free_page(crq->msgs);
 	return retrc;
 }
 
@@ -4590,7 +4590,7 @@ static void ibmvfc_free_mem(struct ibmvfc_host *vhost)
 	dma_pool_destroy(vhost->sg_pool);
 	dma_unmap_single(vhost->dev, async_q->msg_token,
 			 async_q->size * sizeof(*async_q->msgs), DMA_BIDIRECTIONAL);
-	free_page((unsigned long)async_q->msgs);
+	free_page(async_q->msgs);
 	LEAVE;
 }
 
@@ -4680,7 +4680,7 @@ unmap_async_crq:
 	dma_unmap_single(dev, async_q->msg_token,
 			 async_q->size * sizeof(*async_q->msgs), DMA_BIDIRECTIONAL);
 free_async_crq:
-	free_page((unsigned long)async_q->msgs);
+	free_page(async_q->msgs);
 nomem:
 	LEAVE;
 	return -ENOMEM;
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
index adfef9d..88a4eff 100644
--- a/drivers/scsi/ibmvscsi/ibmvscsi.c
+++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
@@ -165,7 +165,7 @@ static void ibmvscsi_release_crq_queue(struct crq_queue *queue,
 	dma_unmap_single(hostdata->dev,
 			 queue->msg_token,
 			 queue->size * sizeof(*queue->msgs), DMA_BIDIRECTIONAL);
-	free_page((unsigned long)queue->msgs);
+	free_page(queue->msgs);
 }
 
 /**
@@ -410,7 +410,7 @@ static int ibmvscsi_init_crq_queue(struct crq_queue *queue,
 			 queue->msg_token,
 			 queue->size * sizeof(*queue->msgs), DMA_BIDIRECTIONAL);
       map_failed:
-	free_page((unsigned long)queue->msgs);
+	free_page(queue->msgs);
       malloc_failed:
 	return -1;
 }
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index 536cd5a..1a05ba8 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -3237,7 +3237,7 @@ static void ipr_release_dump(struct kref *kref)
 	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
 
 	for (i = 0; i < dump->ioa_dump.next_page_index; i++)
-		free_page((unsigned long) dump->ioa_dump.ioa_data[i]);
+		free_page(dump->ioa_dump.ioa_data[i]);
 
 	vfree(dump->ioa_dump.ioa_data);
 	kfree(dump);
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
index 2c1160c7..2f93f80 100644
--- a/drivers/scsi/scsi_devinfo.c
+++ b/drivers/scsi/scsi_devinfo.c
@@ -724,7 +724,7 @@ static ssize_t proc_scsi_devinfo_write(struct file *file,
 	scsi_dev_info_list_add_str(buffer);
 
 out:
-	free_page((unsigned long)buffer);
+	free_page(buffer);
 	return err;
 }
 
diff --git a/drivers/scsi/scsi_proc.c b/drivers/scsi/scsi_proc.c
index 251598e..e0e0e5d 100644
--- a/drivers/scsi/scsi_proc.c
+++ b/drivers/scsi/scsi_proc.c
@@ -66,7 +66,7 @@ static ssize_t proc_scsi_host_write(struct file *file, const char __user *buf,
 		ret = shost->hostt->write_info(shost, page, count);
 	}
 out:
-	free_page((unsigned long)page);
+	free_page(page);
 	return ret;
 }
 
@@ -366,7 +366,7 @@ static ssize_t proc_scsi_write(struct file *file, const char __user *buf,
 		err = length;
 
  out:
-	free_page((unsigned long)buffer);
+	free_page(buffer);
 	return err;
 }
 
diff --git a/drivers/scsi/xen-scsifront.c b/drivers/scsi/xen-scsifront.c
index 9dc8687..d59486a 100644
--- a/drivers/scsi/xen-scsifront.c
+++ b/drivers/scsi/xen-scsifront.c
@@ -729,7 +729,7 @@ static int scsifront_alloc_ring(struct vscsifrnt_info *info)
 
 	err = xenbus_grant_ring(dev, sring, 1, &gref);
 	if (err < 0) {
-		free_page((unsigned long)sring);
+		free_page(sring);
 		xenbus_dev_fatal(dev, err,
 			"fail to grant shared ring (Front to Back)");
 		return err;
diff --git a/drivers/spi/spi-ep93xx.c b/drivers/spi/spi-ep93xx.c
index bb00be8..5b59d23 100644
--- a/drivers/spi/spi-ep93xx.c
+++ b/drivers/spi/spi-ep93xx.c
@@ -835,7 +835,7 @@ fail_release_rx:
 	dma_release_channel(espi->dma_rx);
 	espi->dma_rx = NULL;
 fail_free_page:
-	free_page((unsigned long)espi->zeropage);
+	free_page(espi->zeropage);
 
 	return ret;
 }
@@ -852,7 +852,7 @@ static void ep93xx_spi_release_dma(struct ep93xx_spi *espi)
 	}
 
 	if (espi->zeropage)
-		free_page((unsigned long)espi->zeropage);
+		free_page(espi->zeropage);
 }
 
 static int ep93xx_spi_probe(struct platform_device *pdev)
diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c
index a7934ab..b8286e7 100644
--- a/drivers/spi/spi-sh-msiof.c
+++ b/drivers/spi/spi-sh-msiof.c
@@ -1118,9 +1118,9 @@ static int sh_msiof_request_dma(struct sh_msiof_spi_priv *p)
 unmap_tx_page:
 	dma_unmap_single(tx_dev, p->tx_dma_addr, PAGE_SIZE, DMA_TO_DEVICE);
 free_rx_page:
-	free_page((unsigned long)p->rx_dma_page);
+	free_page(p->rx_dma_page);
 free_tx_page:
-	free_page((unsigned long)p->tx_dma_page);
+	free_page(p->tx_dma_page);
 free_rx_chan:
 	dma_release_channel(master->dma_rx);
 free_tx_chan:
@@ -1142,8 +1142,8 @@ static void sh_msiof_release_dma(struct sh_msiof_spi_priv *p)
 			 PAGE_SIZE, DMA_FROM_DEVICE);
 	dma_unmap_single(master->dma_tx->device->dev, p->tx_dma_addr,
 			 PAGE_SIZE, DMA_TO_DEVICE);
-	free_page((unsigned long)p->rx_dma_page);
-	free_page((unsigned long)p->tx_dma_page);
+	free_page(p->rx_dma_page);
+	free_page(p->tx_dma_page);
 	dma_release_channel(master->dma_rx);
 	dma_release_channel(master->dma_tx);
 }
diff --git a/drivers/staging/comedi/comedi_buf.c b/drivers/staging/comedi/comedi_buf.c
index 90c2801..f3625bb 100644
--- a/drivers/staging/comedi/comedi_buf.c
+++ b/drivers/staging/comedi/comedi_buf.c
@@ -48,7 +48,7 @@ static void comedi_buf_map_kref_release(struct kref *kref)
 						  buf->dma_addr);
 #endif
 			} else {
-				free_page((unsigned long)buf->virt_addr);
+				free_page(buf->virt_addr);
 			}
 		}
 		vfree(bm->page_list);
diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c
index 4a8c759..92259be 100644
--- a/drivers/staging/lustre/lustre/llite/llite_lib.c
+++ b/drivers/staging/lustre/lustre/llite/llite_lib.c
@@ -2286,5 +2286,5 @@ void ll_dirty_page_discard_warn(struct page *page, int ioret)
 		dput(dentry);
 
 	if (buf != NULL)
-		free_page((unsigned long)buf);
+		free_page(buf);
 }
diff --git a/drivers/staging/rdma/ehca/ehca_iverbs.h b/drivers/staging/rdma/ehca/ehca_iverbs.h
index 80e6a3d..f493ac4 100644
--- a/drivers/staging/rdma/ehca/ehca_iverbs.h
+++ b/drivers/staging/rdma/ehca/ehca_iverbs.h
@@ -210,7 +210,7 @@ void *ehca_alloc_fw_ctrlblock(gfp_t flags);
 void ehca_free_fw_ctrlblock(void *ptr);
 #else
 #define ehca_alloc_fw_ctrlblock(flags) ((void *)get_zeroed_page(flags))
-#define ehca_free_fw_ctrlblock(ptr) free_page((unsigned long)(ptr))
+#define ehca_free_fw_ctrlblock(ptr) free_page(ptr)
 #endif
 
 void ehca_recover_sqp(struct ib_qp *sqp);
diff --git a/drivers/staging/rdma/ehca/ehca_pd.c b/drivers/staging/rdma/ehca/ehca_pd.c
index 351577a..c3424f4 100644
--- a/drivers/staging/rdma/ehca/ehca_pd.c
+++ b/drivers/staging/rdma/ehca/ehca_pd.c
@@ -92,7 +92,7 @@ int ehca_dealloc_pd(struct ib_pd *pd)
 		list_splice(&my_pd->full[i], &my_pd->free[i]);
 		list_for_each_entry_safe(page, tmp, &my_pd->free[i], list) {
 			leftovers = 1;
-			free_page(page->page);
+			free_page((void *)page->page);
 			kmem_cache_free(small_qp_cache, page);
 		}
 	}
diff --git a/drivers/staging/rdma/ehca/ipz_pt_fn.c b/drivers/staging/rdma/ehca/ipz_pt_fn.c
index 7ffc748..0742740 100644
--- a/drivers/staging/rdma/ehca/ipz_pt_fn.c
+++ b/drivers/staging/rdma/ehca/ipz_pt_fn.c
@@ -120,7 +120,7 @@ static int alloc_queue_pages(struct ipz_queue *queue, const u32 nr_of_pages)
 out:
 	for (f = 0; f < nr_of_pages && queue->queue_pages[f];
 	     f += PAGES_PER_KPAGE)
-		free_page((unsigned long)(queue->queue_pages)[f]);
+		free_page(queue->queue_pages[f]);
 	return 0;
 }
 
@@ -196,7 +196,7 @@ static void free_small_queue_page(struct ipz_queue *queue, struct ehca_pd *pd)
 	mutex_unlock(&pd->lock);
 
 	if (free_page) {
-		free_page(page->page);
+		free_page((void *)page->page);
 		kmem_cache_free(small_qp_cache, page);
 	}
 }
@@ -264,7 +264,7 @@ int ipz_queue_dtor(struct ehca_pd *pd, struct ipz_queue *queue)
 	else {
 		nr_pages = queue->queue_length / queue->pagesize;
 		for (i = 0; i < nr_pages; i += PAGES_PER_KPAGE)
-			free_page((unsigned long)queue->queue_pages[i]);
+			free_page(queue->queue_pages[i]);
 	}
 
 	kvfree(queue->queue_pages);
diff --git a/drivers/staging/rdma/hfi1/qp.c b/drivers/staging/rdma/hfi1/qp.c
index f8c3616..6310b3c 100644
--- a/drivers/staging/rdma/hfi1/qp.c
+++ b/drivers/staging/rdma/hfi1/qp.c
@@ -128,7 +128,7 @@ static void get_map_page(struct hfi1_qpn_table *qpt, struct qpn_map *map)
 
 	spin_lock(&qpt->lock);
 	if (map->page)
-		free_page(page);
+		free_page((void *)page);
 	else
 		map->page = (void *)page;
 	spin_unlock(&qpt->lock);
@@ -1341,7 +1341,7 @@ static void free_qpn_table(struct hfi1_qpn_table *qpt)
 	int i;
 
 	for (i = 0; i < ARRAY_SIZE(qpt->map); i++)
-		free_page((unsigned long) qpt->map[i].page);
+		free_page(qpt->map[i].page);
 }
 
 /**
diff --git a/drivers/staging/rdma/ipath/ipath_qp.c b/drivers/staging/rdma/ipath/ipath_qp.c
index 280cd2d..8ca0b76 100644
--- a/drivers/staging/rdma/ipath/ipath_qp.c
+++ b/drivers/staging/rdma/ipath/ipath_qp.c
@@ -94,7 +94,7 @@ static void get_map_page(struct ipath_qp_table *qpt, struct qpn_map *map)
 
 	spin_lock_irqsave(&qpt->lock, flags);
 	if (map->page)
-		free_page(page);
+		free_page((void *)page);
 	else
 		map->page = (void *)page;
 	spin_unlock_irqrestore(&qpt->lock, flags);
@@ -285,7 +285,7 @@ unsigned ipath_free_all_qps(struct ipath_qp_table *qpt)
 
 	for (n = 0; n < ARRAY_SIZE(qpt->map); n++)
 		if (qpt->map[n].page)
-			free_page((unsigned long) qpt->map[n].page);
+			free_page(qpt->map[n].page);
 	return qp_inuse;
 }
 
diff --git a/drivers/staging/unisys/visorbus/visorchannel.c b/drivers/staging/unisys/visorbus/visorchannel.c
index a4e117f..486bef0 100644
--- a/drivers/staging/unisys/visorbus/visorchannel.c
+++ b/drivers/staging/unisys/visorbus/visorchannel.c
@@ -301,7 +301,7 @@ visorchannel_clear(struct visorchannel *channel, ulong offset, u8 ch,
 	err = 0;
 
 cleanup:
-	free_page((unsigned long)buf);
+	free_page(buf);
 	return err;
 }
 EXPORT_SYMBOL_GPL(visorchannel_clear);
diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
index e319570..ca682ec 100644
--- a/drivers/target/target_core_file.c
+++ b/drivers/target/target_core_file.c
@@ -469,7 +469,7 @@ fd_do_prot_unmap(struct se_cmd *cmd, sector_t lba, sector_t nolb)
 
 	rc = fd_do_prot_fill(cmd->se_dev, lba, nolb, buf, PAGE_SIZE);
 
-	free_page((unsigned long)buf);
+	free_page(buf);
 
 	return rc;
 }
diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c
index e53d9a5..d245a36 100644
--- a/drivers/tty/amiserial.c
+++ b/drivers/tty/amiserial.c
@@ -527,12 +527,12 @@ static int startup(struct tty_struct *tty, struct serial_state *info)
 	local_irq_save(flags);
 
 	if (port->flags & ASYNC_INITIALIZED) {
-		free_page(page);
+		free_page((void *)page);
 		goto errout;
 	}
 
 	if (info->xmit.buf)
-		free_page(page);
+		free_page((void *)page);
 	else
 		info->xmit.buf = (unsigned char *) page;
 
@@ -628,7 +628,7 @@ static void shutdown(struct tty_struct *tty, struct serial_state *info)
 	free_irq(IRQ_AMIGA_VERTB, info);
 
 	if (info->xmit.buf) {
-		free_page((unsigned long) info->xmit.buf);
+		free_page(info->xmit.buf);
 		info->xmit.buf = NULL;
 	}
 
diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
index d4a1331..3310706 100644
--- a/drivers/tty/cyclades.c
+++ b/drivers/tty/cyclades.c
@@ -1288,7 +1288,7 @@ static int cy_startup(struct cyclades_port *info, struct tty_struct *tty)
 	}
 
 	if (info->port.xmit_buf)
-		free_page(page);
+		free_page((void *)page);
 	else
 		info->port.xmit_buf = (unsigned char *)page;
 
@@ -1383,7 +1383,7 @@ static int cy_startup(struct cyclades_port *info, struct tty_struct *tty)
 
 errout:
 	spin_unlock_irqrestore(&card->card_lock, flags);
-	free_page(page);
+	free_page((void *)page);
 	return retval;
 }				/* startup */
 
@@ -1438,7 +1438,7 @@ static void cy_shutdown(struct cyclades_port *info, struct tty_struct *tty)
 			unsigned char *temp;
 			temp = info->port.xmit_buf;
 			info->port.xmit_buf = NULL;
-			free_page((unsigned long)temp);
+			free_page(temp);
 		}
 		if (tty->termios.c_cflag & HUPCL)
 			cyy_change_rts_dtr(info, 0, TIOCM_RTS | TIOCM_DTR);
@@ -1466,7 +1466,7 @@ static void cy_shutdown(struct cyclades_port *info, struct tty_struct *tty)
 			unsigned char *temp;
 			temp = info->port.xmit_buf;
 			info->port.xmit_buf = NULL;
-			free_page((unsigned long)temp);
+			free_page(temp);
 		}
 
 		if (tty->termios.c_cflag & HUPCL)
diff --git a/drivers/tty/hvc/hvc_iucv.c b/drivers/tty/hvc/hvc_iucv.c
index 8b70a16..e17db99 100644
--- a/drivers/tty/hvc/hvc_iucv.c
+++ b/drivers/tty/hvc/hvc_iucv.c
@@ -1158,7 +1158,7 @@ static int __init hvc_iucv_alloc(int id, unsigned int is_console)
 out_error_dev:
 	hvc_remove(priv->hvc);
 out_error_hvc:
-	free_page((unsigned long) priv->sndbuf);
+	free_page(priv->sndbuf);
 	kfree(priv);
 
 	return rc;
@@ -1171,7 +1171,7 @@ static void __init hvc_iucv_destroy(struct hvc_iucv_private *priv)
 {
 	hvc_remove(priv->hvc);
 	device_unregister(priv->dev);
-	free_page((unsigned long) priv->sndbuf);
+	free_page(priv->sndbuf);
 	kfree(priv);
 }
 
diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
index fa816b7..4f7716d 100644
--- a/drivers/tty/hvc/hvc_xen.c
+++ b/drivers/tty/hvc/hvc_xen.c
@@ -341,7 +341,7 @@ static void xencons_disconnect_backend(struct xencons_info *info)
 
 static void xencons_free(struct xencons_info *info)
 {
-	free_page((unsigned long)info->intf);
+	free_page(info->intf);
 	info->intf = NULL;
 	info->vtermno = 0;
 	kfree(info);
diff --git a/drivers/tty/hvc/hvcs.c b/drivers/tty/hvc/hvcs.c
index 5997b17..fb3f4cd 100644
--- a/drivers/tty/hvc/hvcs.c
+++ b/drivers/tty/hvc/hvcs.c
@@ -1548,7 +1548,7 @@ static int hvcs_initialize(void)
 	return 0;
 
 kthread_fail:
-	free_page((unsigned long)hvcs_pi_buff);
+	free_page(hvcs_pi_buff);
 buff_alloc_fail:
 	tty_unregister_driver(hvcs_tty_driver);
 register_fail:
@@ -1597,7 +1597,7 @@ static void __exit hvcs_module_exit(void)
 	kthread_stop(hvcs_task);
 
 	spin_lock(&hvcs_pi_lock);
-	free_page((unsigned long)hvcs_pi_buff);
+	free_page(hvcs_pi_buff);
 	hvcs_pi_buff = NULL;
 	spin_unlock(&hvcs_pi_lock);
 
diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 4c4a236..b730857 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -873,7 +873,7 @@ static int mxser_activate(struct tty_port *port, struct tty_struct *tty)
 
 	if (!info->ioaddr || !info->type) {
 		set_bit(TTY_IO_ERROR, &tty->flags);
-		free_page(page);
+		free_page((void *)page);
 		spin_unlock_irqrestore(&info->slock, flags);
 		return 0;
 	}
@@ -969,7 +969,7 @@ static void mxser_shutdown_port(struct tty_port *port)
 	 * Free the xmit buffer, if necessary
 	 */
 	if (info->port.xmit_buf) {
-		free_page((unsigned long) info->port.xmit_buf);
+		free_page(info->port.xmit_buf);
 		info->port.xmit_buf = NULL;
 	}
 
diff --git a/drivers/tty/rocket.c b/drivers/tty/rocket.c
index 802eac7..2ed96e3 100644
--- a/drivers/tty/rocket.c
+++ b/drivers/tty/rocket.c
@@ -899,7 +899,7 @@ static int rp_open(struct tty_struct *tty, struct file *filp)
 	 * We must not sleep from here until the port is marked fully in use.
 	 */
 	if (info->xmit_buf)
-		free_page(page);
+		free_page((void *)page);
 	else
 		info->xmit_buf = (unsigned char *) page;
 
@@ -1038,7 +1038,7 @@ static void rp_close(struct tty_struct *tty, struct file *filp)
 		wake_up_interruptible(&port->open_wait);
 	} else {
 		if (info->xmit_buf) {
-			free_page((unsigned long) info->xmit_buf);
+			free_page(info->xmit_buf);
 			info->xmit_buf = NULL;
 		}
 	}
diff --git a/drivers/tty/serial/68328serial.c b/drivers/tty/serial/68328serial.c
index 0140ba4..4485466 100644
--- a/drivers/tty/serial/68328serial.c
+++ b/drivers/tty/serial/68328serial.c
@@ -436,7 +436,7 @@ static void shutdown(struct m68k_serial *info, struct tty_struct *tty)
 	local_irq_save(flags);
 	
 	if (info->xmit_buf) {
-		free_page((unsigned long) info->xmit_buf);
+		free_page(info->xmit_buf);
 		info->xmit_buf = 0;
 	}
 
diff --git a/drivers/tty/serial/crisv10.c b/drivers/tty/serial/crisv10.c
index f13f2eb..8e792c1 100644
--- a/drivers/tty/serial/crisv10.c
+++ b/drivers/tty/serial/crisv10.c
@@ -2603,12 +2603,12 @@ startup(struct e100_serial * info)
 
 	if (info->port.flags & ASYNC_INITIALIZED) {
 		local_irq_restore(flags);
-		free_page(xmit_page);
+		free_page((void *)xmit_page);
 		return 0;
 	}
 
 	if (info->xmit.buf)
-		free_page(xmit_page);
+		free_page((void *)xmit_page);
 	else
 		info->xmit.buf = (unsigned char *) xmit_page;
 
@@ -2758,7 +2758,7 @@ shutdown(struct e100_serial * info)
 	local_irq_save(flags);
 
 	if (info->xmit.buf) {
-		free_page((unsigned long)info->xmit.buf);
+		free_page(info->xmit.buf);
 		info->xmit.buf = NULL;
 	}
 
diff --git a/drivers/tty/serial/men_z135_uart.c b/drivers/tty/serial/men_z135_uart.c
index 3141aa2..df3c6ad 100644
--- a/drivers/tty/serial/men_z135_uart.c
+++ b/drivers/tty/serial/men_z135_uart.c
@@ -855,7 +855,7 @@ static int men_z135_probe(struct mcb_device *mdev,
 	return 0;
 
 err:
-	free_page((unsigned long) uart->rxbuf);
+	free_page(uart->rxbuf);
 	dev_err(dev, "Failed to add UART: %d\n", err);
 
 	return err;
@@ -872,7 +872,7 @@ static void men_z135_remove(struct mcb_device *mdev)
 
 	line--;
 	uart_remove_one_port(&men_z135_driver, &uart->port);
-	free_page((unsigned long) uart->rxbuf);
+	free_page(uart->rxbuf);
 }
 
 static const struct mcb_device_id men_z135_ids[] = {
diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c
index ea4ffc2..7e461e0 100644
--- a/drivers/tty/serial/pch_uart.c
+++ b/drivers/tty/serial/pch_uart.c
@@ -1845,7 +1845,7 @@ init_port_hal_free:
 #ifdef CONFIG_SERIAL_PCH_UART_CONSOLE
 	pch_uart_ports[board->line_no] = NULL;
 #endif
-	free_page((unsigned long)rxbuf);
+	free_page(rxbuf);
 init_port_free_txbuf:
 	kfree(priv);
 init_port_alloc_err:
@@ -1861,7 +1861,7 @@ static void pch_uart_exit_port(struct eg20t_port *priv)
 		debugfs_remove(priv->debugfs);
 #endif
 	uart_remove_one_port(&pch_uart_driver, &priv->port);
-	free_page((unsigned long)priv->rxbuf.buf);
+	free_page(priv->rxbuf.buf);
 }
 
 static void pch_uart_pci_remove(struct pci_dev *pdev)
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index def5199..9bc0284 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -257,7 +257,7 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state)
 	 * Free the transmit buffer page.
 	 */
 	if (state->xmit.buf) {
-		free_page((unsigned long)state->xmit.buf);
+		free_page(state->xmit.buf);
 		state->xmit.buf = NULL;
 	}
 }
diff --git a/drivers/tty/synclink.c b/drivers/tty/synclink.c
index 6188059..6e52c8f 100644
--- a/drivers/tty/synclink.c
+++ b/drivers/tty/synclink.c
@@ -1824,7 +1824,7 @@ static void shutdown(struct mgsl_struct * info)
 	del_timer_sync(&info->tx_timer);
 
 	if (info->xmit_buf) {
-		free_page((unsigned long) info->xmit_buf);
+		free_page(info->xmit_buf);
 		info->xmit_buf = NULL;
 	}
 
diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c
index 482f33f..3fe48c7 100644
--- a/drivers/tty/tty_port.c
+++ b/drivers/tty/tty_port.c
@@ -113,7 +113,7 @@ void tty_port_free_xmit_buf(struct tty_port *port)
 {
 	mutex_lock(&port->buf_mutex);
 	if (port->xmit_buf != NULL) {
-		free_page((unsigned long)port->xmit_buf);
+		free_page(port->xmit_buf);
 		port->xmit_buf = NULL;
 	}
 	mutex_unlock(&port->buf_mutex);
@@ -143,7 +143,7 @@ static void tty_port_destructor(struct kref *kref)
 	if (WARN_ON(port->itty))
 		return;
 	if (port->xmit_buf)
-		free_page((unsigned long)port->xmit_buf);
+		free_page(port->xmit_buf);
 	tty_port_destroy(port);
 	if (port->ops && port->ops->destruct)
 		port->ops->destruct(port);
diff --git a/drivers/tty/vt/vc_screen.c b/drivers/tty/vt/vc_screen.c
index 14a2b5f..5d25934 100644
--- a/drivers/tty/vt/vc_screen.c
+++ b/drivers/tty/vt/vc_screen.c
@@ -366,7 +366,7 @@ vcs_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
 		ret = read;
 unlock_out:
 	console_unlock();
-	free_page((unsigned long) con_buf);
+	free_page(con_buf);
 	return ret;
 }
 
@@ -554,7 +554,7 @@ vcs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
 
 unlock_out:
 	console_unlock();
-	free_page((unsigned long) con_buf);
+	free_page(con_buf);
 	return ret;
 }
 
diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c
index 1173f9c..f03bc30 100644
--- a/drivers/usb/atm/cxacru.c
+++ b/drivers/usb/atm/cxacru.c
@@ -978,7 +978,7 @@ static int cxacru_fw(struct usb_device *usb_dev, enum cxacru_fw_request fw,
 	ret = 0;
 
 cleanup:
-	free_page((unsigned long) buf);
+	free_page(buf);
 	return ret;
 }
 
@@ -1217,8 +1217,8 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance,
 	return 0;
 
  fail:
-	free_page((unsigned long) instance->snd_buf);
-	free_page((unsigned long) instance->rcv_buf);
+	free_page(instance->snd_buf);
+	free_page(instance->rcv_buf);
 	usb_free_urb(instance->snd_urb);
 	usb_free_urb(instance->rcv_urb);
 	kfree(instance);
@@ -1259,8 +1259,8 @@ static void cxacru_unbind(struct usbatm_data *usbatm_instance,
 	usb_free_urb(instance->snd_urb);
 	usb_free_urb(instance->rcv_urb);
 
-	free_page((unsigned long) instance->snd_buf);
-	free_page((unsigned long) instance->rcv_buf);
+	free_page(instance->snd_buf);
+	free_page(instance->rcv_buf);
 
 	kfree(instance);
 
diff --git a/drivers/usb/atm/speedtch.c b/drivers/usb/atm/speedtch.c
index 0270d13..681599f 100644
--- a/drivers/usb/atm/speedtch.c
+++ b/drivers/usb/atm/speedtch.c
@@ -354,7 +354,7 @@ static int speedtch_upload_firmware(struct speedtch_instance_data *instance,
 	ret = 0;
 
 out_free:
-	free_page((unsigned long)buffer);
+	free_page(buffer);
 out:
 	return ret;
 }
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index 38ae877c..c2cef46 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -1047,7 +1047,7 @@ static int proc_control(struct usb_dev_state *ps, void __user *arg)
 	}
 	ret = i;
  done:
-	free_page((unsigned long) tbuf);
+	free_page(tbuf);
 	usbfs_decrease_memory_usage(PAGE_SIZE + sizeof(struct urb) +
 			sizeof(struct usb_ctrlrequest));
 	return ret;
diff --git a/drivers/usb/host/ohci-dbg.c b/drivers/usb/host/ohci-dbg.c
index c3eded3..1e8397f 100644
--- a/drivers/usb/host/ohci-dbg.c
+++ b/drivers/usb/host/ohci-dbg.c
@@ -730,7 +730,7 @@ static int debug_close(struct inode *inode, struct file *file)
 
 	if (buf) {
 		if (buf->page)
-			free_page((unsigned long)buf->page);
+			free_page(buf->page);
 		kfree(buf);
 	}
 
diff --git a/drivers/usb/misc/rio500.c b/drivers/usb/misc/rio500.c
index 13731d5..3c49061 100644
--- a/drivers/usb/misc/rio500.c
+++ b/drivers/usb/misc/rio500.c
@@ -146,7 +146,7 @@ static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
 		}
 		if (copy_from_user(buffer, rio_cmd.buffer, rio_cmd.length)) {
 			retval = -EFAULT;
-			free_page((unsigned long) buffer);
+			free_page(buffer);
 			goto err_out;
 		}
 
@@ -180,7 +180,7 @@ static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
 					result, buffer[0]);
 				if (copy_to_user(rio_cmd.buffer, buffer,
 						 rio_cmd.length)) {
-					free_page((unsigned long) buffer);
+					free_page(buffer);
 					retval = -EFAULT;
 					goto err_out;
 				}
@@ -195,7 +195,7 @@ static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
 			   be swapped at the app level */
 
 		}
-		free_page((unsigned long) buffer);
+		free_page(buffer);
 		break;
 
 	case RIO_SEND_COMMAND:
@@ -216,7 +216,7 @@ static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
 			goto err_out;
 		}
 		if (copy_from_user(buffer, rio_cmd.buffer, rio_cmd.length)) {
-			free_page((unsigned long)buffer);
+			free_page(buffer);
 			retval = -EFAULT;
 			goto err_out;
 		}
@@ -253,7 +253,7 @@ static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
 			}
 
 		}
-		free_page((unsigned long) buffer);
+		free_page(buffer);
 		break;
 
 	default:
diff --git a/drivers/usb/mon/mon_bin.c b/drivers/usb/mon/mon_bin.c
index 3598f1a..bd463eb 100644
--- a/drivers/usb/mon/mon_bin.c
+++ b/drivers/usb/mon/mon_bin.c
@@ -1311,7 +1311,7 @@ static int mon_alloc_buff(struct mon_pgmap *map, int npages)
 		vaddr = get_zeroed_page(GFP_KERNEL);
 		if (vaddr == 0) {
 			while (n-- != 0)
-				free_page((unsigned long) map[n].ptr);
+				free_page(map[n].ptr);
 			return -ENOMEM;
 		}
 		map[n].ptr = (unsigned char *) vaddr;
@@ -1325,7 +1325,7 @@ static void mon_free_buff(struct mon_pgmap *map, int npages)
 	int n;
 
 	for (n = 0; n < npages; n++)
-		free_page((unsigned long) map[n].ptr);
+		free_page(map[n].ptr);
 }
 
 int mon_bin_add(struct mon_bus *mbus, const struct usb_bus *ubus)
diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
index be9cb61..de9ff1b 100644
--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -562,7 +562,7 @@ bail_out_error2:
 bail_out_error:
 	for (i = 0; i < N_IN_URB; i++) {
 		usb_free_urb(portdata->in_urbs[i]);
-		free_page((unsigned long)portdata->in_buffer[i]);
+		free_page(portdata->in_buffer[i]);
 	}
 	kfree(portdata);
 
@@ -580,7 +580,7 @@ int usb_wwan_port_remove(struct usb_serial_port *port)
 
 	for (i = 0; i < N_IN_URB; i++) {
 		usb_free_urb(portdata->in_urbs[i]);
-		free_page((unsigned long)portdata->in_buffer[i]);
+		free_page(portdata->in_buffer[i]);
 	}
 	for (i = 0; i < N_OUT_URB; i++) {
 		usb_free_urb(portdata->out_urbs[i]);
diff --git a/drivers/uwb/hwa-rc.c b/drivers/uwb/hwa-rc.c
index 0257f35..2d3334f 100644
--- a/drivers/uwb/hwa-rc.c
+++ b/drivers/uwb/hwa-rc.c
@@ -720,7 +720,7 @@ error_neep_submit:
 	usb_free_urb(hwarc->neep_urb);
 	hwarc->neep_urb = NULL;
 error_urb_alloc:
-	free_page((unsigned long)hwarc->rd_buffer);
+	free_page(hwarc->rd_buffer);
 	hwarc->rd_buffer = NULL;
 error_rd_buffer:
 	return -ENOMEM;
@@ -736,7 +736,7 @@ static void hwarc_neep_release(struct uwb_rc *rc)
 	usb_free_urb(hwarc->neep_urb);
 	hwarc->neep_urb = NULL;
 
-	free_page((unsigned long)hwarc->rd_buffer);
+	free_page(hwarc->rd_buffer);
 	hwarc->rd_buffer = NULL;
 }
 
diff --git a/drivers/video/fbdev/xen-fbfront.c b/drivers/video/fbdev/xen-fbfront.c
index 0567d51..b126f77 100644
--- a/drivers/video/fbdev/xen-fbfront.c
+++ b/drivers/video/fbdev/xen-fbfront.c
@@ -529,7 +529,7 @@ static int xenfb_remove(struct xenbus_device *dev)
 		fb_dealloc_cmap(&info->fb_info->cmap);
 		framebuffer_release(info->fb_info);
 	}
-	free_page((unsigned long)info->page);
+	free_page(info->page);
 	vfree(info->gfns);
 	vfree(info->fb);
 	kfree(info);
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
index 524c221..0fe5889 100644
--- a/drivers/xen/events/events_base.c
+++ b/drivers/xen/events/events_base.c
@@ -1693,7 +1693,7 @@ void __init xen_init_IRQ(void)
 		rc = HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_gmfn_v2, &eoi_gmfn);
 		/* TODO: No PVH support for PIRQ EOI */
 		if (rc != 0) {
-			free_page((unsigned long) pirq_eoi_map);
+			free_page(pirq_eoi_map);
 			pirq_eoi_map = NULL;
 		} else
 			pirq_needs_eoi = pirq_check_eoi_map;
diff --git a/drivers/xen/events/events_fifo.c b/drivers/xen/events/events_fifo.c
index e3e9e3d..722c2a0 100644
--- a/drivers/xen/events/events_fifo.c
+++ b/drivers/xen/events/events_fifo.c
@@ -125,7 +125,7 @@ static void free_unused_array_pages(void)
 	for (i = event_array_pages; i < MAX_EVENT_ARRAY_PAGES; i++) {
 		if (!event_array[i])
 			break;
-		free_page((unsigned long)event_array[i]);
+		free_page(event_array[i]);
 		event_array[i] = NULL;
 	}
 }
@@ -353,7 +353,7 @@ static void evtchn_fifo_resume(void)
 		 * used.
 		 */
 		if (!cpu_online(cpu)) {
-			free_page((unsigned long)control_block);
+			free_page(control_block);
 			per_cpu(cpu_control_block, cpu) = NULL;
 			continue;
 		}
@@ -404,7 +404,7 @@ static int evtchn_fifo_alloc_control_block(unsigned cpu)
 	return 0;
 
   error:
-	free_page((unsigned long)control_block);
+	free_page(control_block);
 	return ret;
 }
 
diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
index 38272ad..bcd5f54 100644
--- a/drivers/xen/evtchn.c
+++ b/drivers/xen/evtchn.c
@@ -308,7 +308,7 @@ static ssize_t evtchn_write(struct file *file, const char __user *buf,
 	rc = count;
 
  out:
-	free_page((unsigned long)kbuf);
+	free_page(kbuf);
 	return rc;
 }
 
diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
index c49f79ed..1189c13 100644
--- a/drivers/xen/grant-table.c
+++ b/drivers/xen/grant-table.c
@@ -384,7 +384,7 @@ void gnttab_end_foreign_access(grant_ref_t ref, int readonly,
 	if (gnttab_end_foreign_access_ref(ref, readonly)) {
 		put_free_entry(ref);
 		if (page != 0)
-			free_page(page);
+			free_page((void *)page);
 	} else
 		gnttab_add_deferred(ref, readonly,
 				    page ? virt_to_page(page) : NULL);
@@ -599,7 +599,7 @@ static int grow_gnttab_list(unsigned int more_frames)
 
 grow_nomem:
 	while (i-- > nr_glist_frames)
-		free_page((unsigned long) gnttab_list[i]);
+		free_page(gnttab_list[i]);
 	return -ENOMEM;
 }
 
@@ -1139,7 +1139,7 @@ int gnttab_init(void)
 
  ini_nomem:
 	for (i--; i >= 0; i--)
-		free_page((unsigned long)gnttab_list[i]);
+		free_page(gnttab_list[i]);
 	kfree(gnttab_list);
 	return ret;
 }
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
index 33a31cf..43eae6a 100644
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -730,7 +730,7 @@ static int __init xenstored_local_init(void)
 
  out_err:
 	if (page != 0)
-		free_page(page);
+		free_page((void *)page);
 	return err;
 }
 
diff --git a/fs/affs/inode.c b/fs/affs/inode.c
index 1734950..dcfa753 100644
--- a/fs/affs/inode.c
+++ b/fs/affs/inode.c
@@ -274,7 +274,7 @@ affs_evict_inode(struct inode *inode)
 		pr_debug("freeing ext cache\n");
 		AFFS_I(inode)->i_lc = NULL;
 		AFFS_I(inode)->i_ac = NULL;
-		free_page(cache_page);
+		free_page((void *)cache_page);
 	}
 	affs_brelse(AFFS_I(inode)->i_ext_bh);
 	AFFS_I(inode)->i_ext_last = ~1;
diff --git a/fs/afs/mntpt.c b/fs/afs/mntpt.c
index ccd0b21..f077aee 100644
--- a/fs/afs/mntpt.c
+++ b/fs/afs/mntpt.c
@@ -205,17 +205,17 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)
 	mnt = vfs_kern_mount(&afs_fs_type, 0, devname, options);
 	_debug("--- mount result %p ---", mnt);
 
-	free_page((unsigned long) devname);
-	free_page((unsigned long) options);
+	free_page(devname);
+	free_page(options);
 	_leave(" = %p", mnt);
 	return mnt;
 
 error:
 	page_cache_release(page);
 error_no_page:
-	free_page((unsigned long) options);
+	free_page(options);
 error_no_options:
-	free_page((unsigned long) devname);
+	free_page(devname);
 error_no_devname:
 	_leave(" = %d", ret);
 	return ERR_PTR(ret);
diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c
index fdcb4d6..590b7bb 100644
--- a/fs/bfs/inode.c
+++ b/fs/bfs/inode.c
@@ -313,7 +313,7 @@ void bfs_dump_imap(const char *prefix, struct super_block *s)
 	}
 	printf("BFS-fs: %s: lasti=%08lx <%s>\n",
 				prefix, BFS_SB(s)->si_lasti, tmpbuf);
-	free_page((unsigned long)tmpbuf);
+	free_page(tmpbuf);
 #endif
 }
 
diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
index 78f005f..a7ab050 100644
--- a/fs/binfmt_misc.c
+++ b/fs/binfmt_misc.c
@@ -615,7 +615,7 @@ bm_entry_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
 
 	res = simple_read_from_buffer(buf, nbytes, ppos, page, strlen(page));
 
-	free_page((unsigned long) page);
+	free_page(page);
 	return res;
 }
 
diff --git a/fs/compat.c b/fs/compat.c
index 6fd272d..c4708ae 100644
--- a/fs/compat.c
+++ b/fs/compat.c
@@ -825,7 +825,7 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name,
 			flags, (void*)data_page);
 
  out3:
-	free_page(data_page);
+	free_page((void *)data_page);
  out2:
 	kfree(kernel_dev);
  out1:
diff --git a/fs/configfs/file.c b/fs/configfs/file.c
index d39099e..c4a3c5c 100644
--- a/fs/configfs/file.c
+++ b/fs/configfs/file.c
@@ -296,7 +296,7 @@ static int configfs_release(struct inode * inode, struct file * filp)
 
 	if (buffer) {
 		if (buffer->page)
-			free_page((unsigned long)buffer->page);
+			free_page(buffer->page);
 		mutex_destroy(&buffer->mutex);
 		kfree(buffer);
 	}
diff --git a/fs/configfs/symlink.c b/fs/configfs/symlink.c
index ec5c832..a04bf59 100644
--- a/fs/configfs/symlink.c
+++ b/fs/configfs/symlink.c
@@ -292,7 +292,7 @@ static const char *configfs_follow_link(struct dentry *dentry, void **cookie)
 		return *cookie = (void *)page;
 	}
 
-	free_page(page);
+	free_page((void *)page);
 	return ERR_PTR(error);
 }
 
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index c9ab67d..f785c13 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -3064,7 +3064,7 @@ int ext4_calculate_overhead(struct super_block *sb)
 
 	sbi->s_overhead = overhead;
 	smp_wmb();
-	free_page((unsigned long) buf);
+	free_page(buf);
 	return 0;
 }
 
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
index 5e2e087..37b4ae3 100644
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -1385,7 +1385,7 @@ static const char *fuse_follow_link(struct dentry *dentry, void **cookie)
 	args.out.args[0].value = link;
 	ret = fuse_simple_request(fc, &args);
 	if (ret < 0) {
-		free_page((unsigned long) link);
+		free_page(link);
 		link = ERR_PTR(ret);
 	} else {
 		link[ret] = '\0';
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 570ca40..a07709b 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -2599,7 +2599,7 @@ long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
  out:
 	if (req)
 		fuse_put_request(fc, req);
-	free_page((unsigned long) iov_page);
+	free_page(iov_page);
 	while (num_pages)
 		__free_page(pages[--num_pages]);
 	kfree(pages);
diff --git a/fs/isofs/dir.c b/fs/isofs/dir.c
index b943cbd..2d495b5 100644
--- a/fs/isofs/dir.c
+++ b/fs/isofs/dir.c
@@ -261,7 +261,7 @@ static int isofs_readdir(struct file *file, struct dir_context *ctx)
 
 	result = do_isofs_readdir(inode, file, ctx, tmpname, tmpde);
 
-	free_page((unsigned long) tmpname);
+	free_page(tmpname);
 	return result;
 }
 
diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c
index d88576e..e585852 100644
--- a/fs/jfs/jfs_dtree.c
+++ b/fs/jfs/jfs_dtree.c
@@ -3324,13 +3324,13 @@ skip_one:
 
 		DT_GETPAGE(ip, bn, mp, PSIZE, p, rc);
 		if (rc) {
-			free_page(dirent_buf);
+			free_page((void *)dirent_buf);
 			return rc;
 		}
 	}
 
       out:
-	free_page(dirent_buf);
+	free_page((void *)dirent_buf);
 
 	return rc;
 }
diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c
index a69bdf2..f635c17 100644
--- a/fs/jfs/jfs_logmgr.c
+++ b/fs/jfs/jfs_logmgr.c
@@ -1845,7 +1845,7 @@ static int lbmLogInit(struct jfs_log * log)
 			lbuf = kmalloc(sizeof(struct lbuf), GFP_KERNEL);
 			if (lbuf == NULL) {
 				if (offset == 0)
-					free_page((unsigned long) buffer);
+					free_page(buffer);
 				goto error;
 			}
 			if (offset) /* we already have one reference */
diff --git a/fs/kernfs/symlink.c b/fs/kernfs/symlink.c
index db27252..e98d520 100644
--- a/fs/kernfs/symlink.c
+++ b/fs/kernfs/symlink.c
@@ -120,7 +120,7 @@ static const char *kernfs_iop_follow_link(struct dentry *dentry, void **cookie)
 		return ERR_PTR(-ENOMEM);
 	error = kernfs_getlink(dentry, (char *)page);
 	if (unlikely(error < 0)) {
-		free_page((unsigned long)page);
+		free_page((void *)page);
 		return ERR_PTR(error);
 	}
 	return *cookie = (char *)page;
diff --git a/fs/libfs.c b/fs/libfs.c
index c7cbfb0..1a790b9 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -709,7 +709,7 @@ char *simple_transaction_get(struct file *file, const char __user *buf, size_t s
 	/* only one write allowed per open */
 	if (file->private_data) {
 		spin_unlock(&simple_transaction_lock);
-		free_page((unsigned long)ar);
+		free_page(ar);
 		return ERR_PTR(-EBUSY);
 	}
 
@@ -736,7 +736,7 @@ EXPORT_SYMBOL(simple_transaction_read);
 
 int simple_transaction_release(struct inode *inode, struct file *file)
 {
-	free_page((unsigned long)file->private_data);
+	free_page(file->private_data);
 	return 0;
 }
 EXPORT_SYMBOL(simple_transaction_release);
@@ -1027,7 +1027,7 @@ EXPORT_SYMBOL(kfree_put_link);
 
 void free_page_put_link(struct inode *unused, void *cookie)
 {
-	free_page((unsigned long) cookie);
+	free_page(cookie);
 }
 EXPORT_SYMBOL(free_page_put_link);
 
diff --git a/fs/namespace.c b/fs/namespace.c
index 0570729..55df421 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -2625,7 +2625,7 @@ int copy_mount_options(const void __user * data, unsigned long *where)
 
 	i = size - exact_copy_from_user((void *)page, data, size);
 	if (!i) {
-		free_page(page);
+		free_page((void *)page);
 		return -EFAULT;
 	}
 	if (i != PAGE_SIZE)
@@ -2915,7 +2915,7 @@ SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,
 	ret = do_mount(kernel_dev, dir_name, kernel_type, flags,
 		(void *) data_page);
 
-	free_page(data_page);
+	free_page((void *)data_page);
 out_data:
 	kfree(kernel_dev);
 out_dev:
diff --git a/fs/nfs/namespace.c b/fs/nfs/namespace.c
index c8162c6..faa1ce5 100644
--- a/fs/nfs/namespace.c
+++ b/fs/nfs/namespace.c
@@ -263,7 +263,7 @@ struct vfsmount *nfs_do_submount(struct dentry *dentry, struct nfs_fh *fh,
 		goto free_page;
 	mnt = nfs_do_clone_mount(NFS_SB(dentry->d_sb), devname, &mountdata);
 free_page:
-	free_page((unsigned long)page);
+	free_page(page);
 out:
 	dprintk("%s: done\n", __func__);
 
diff --git a/fs/nfs/nfs4namespace.c b/fs/nfs/nfs4namespace.c
index f592672..82b1537 100644
--- a/fs/nfs/nfs4namespace.c
+++ b/fs/nfs/nfs4namespace.c
@@ -338,8 +338,8 @@ static struct vfsmount *nfs_follow_referral(struct dentry *dentry,
 	}
 
 out:
-	free_page((unsigned long) page);
-	free_page((unsigned long) page2);
+	free_page(page);
+	free_page(page2);
 	dprintk("%s: done\n", __func__);
 	return mnt;
 }
@@ -517,7 +517,7 @@ int nfs4_replace_transport(struct nfs_server *server,
 	}
 
 out:
-	free_page((unsigned long)page);
-	free_page((unsigned long)page2);
+	free_page(page);
+	free_page(page2);
 	return error;
 }
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index f126828..ba0ad91 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -789,7 +789,7 @@ int nfs_show_devname(struct seq_file *m, struct dentry *root)
 		err = PTR_ERR(devname);
 	else
 		seq_escape(m, devname, " \t\n\\");
-	free_page((unsigned long)page);
+	free_page(page);
 	return err;
 }
 EXPORT_SYMBOL_GPL(nfs_show_devname);
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index 994d66f..e9df47b 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -1860,7 +1860,7 @@ static __be32 nfsd_buffered_readdir(struct file *file, nfsd_filldir_t func,
 		offset = vfs_llseek(file, 0, SEEK_CUR);
 	}
 
-	free_page((unsigned long)(buf.dirent));
+	free_page(buf.dirent);
 
 	if (host_err)
 		return nfserrno(host_err);
diff --git a/fs/ocfs2/dlm/dlmdebug.c b/fs/ocfs2/dlm/dlmdebug.c
index 8251360..f172c20 100644
--- a/fs/ocfs2/dlm/dlmdebug.c
+++ b/fs/ocfs2/dlm/dlmdebug.c
@@ -332,7 +332,7 @@ void dlm_print_one_mle(struct dlm_master_list_entry *mle)
 	buf = (char *) get_zeroed_page(GFP_NOFS);
 	if (buf) {
 		dump_mle(mle, buf, PAGE_SIZE - 1);
-		free_page((unsigned long)buf);
+		free_page(buf);
 	}
 }
 
@@ -369,7 +369,7 @@ static void dlm_debug_get(struct dlm_debug_ctxt *dc)
 
 static int debug_release(struct inode *inode, struct file *file)
 {
-	free_page((unsigned long)file->private_data);
+	free_page(file->private_data);
 	return 0;
 }
 
diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c
index 2ee7fe7..841d822 100644
--- a/fs/ocfs2/dlm/dlmdomain.c
+++ b/fs/ocfs2/dlm/dlmdomain.c
@@ -79,7 +79,7 @@ static inline void byte_copymap(u8 dmap[], unsigned long smap[],
 static void dlm_free_pagevec(void **vec, int pages)
 {
 	while (pages--)
-		free_page((unsigned long)vec[pages]);
+		free_page(vec[pages]);
 	kfree(vec);
 }
 
diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
index ce38b4c..a0edd7e 100644
--- a/fs/ocfs2/dlm/dlmmaster.c
+++ b/fs/ocfs2/dlm/dlmmaster.c
@@ -2679,7 +2679,7 @@ leave:
 		wake_up(&res->wq);
 
 	if (mres)
-		free_page((unsigned long)mres);
+		free_page(mres);
 
 	dlm_put(dlm);
 
diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c
index 9e4f862..7368158 100644
--- a/fs/ocfs2/dlm/dlmrecovery.c
+++ b/fs/ocfs2/dlm/dlmrecovery.c
@@ -952,7 +952,7 @@ static void dlm_request_all_locks_worker(struct dlm_work_item *item, void *data)
 		}
 	}
 leave:
-	free_page((unsigned long)data);
+	free_page(data);
 }
 
 
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index 0a89834..b3f1da5 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -145,7 +145,7 @@ static char *ovl_read_symlink(struct dentry *realdentry)
 				    (char __user *)buf, PAGE_SIZE - 1);
 	set_fs(old_fs);
 	if (res < 0) {
-		free_page((unsigned long) buf);
+		free_page(buf);
 		goto err;
 	}
 	buf[res] = '\0';
@@ -359,7 +359,7 @@ out_unlock:
 
 out_free_link:
 	if (link)
-		free_page((unsigned long) link);
+		free_page(link);
 
 	return err;
 }
diff --git a/fs/proc/base.c b/fs/proc/base.c
index bd3e9e6..a9828e5 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -387,7 +387,7 @@ skip_argv_envp:
 	}
 
 out_free_page:
-	free_page((unsigned long)page);
+	free_page(page);
 out_mmput:
 	mmput(mm);
 	if (rv > 0)
@@ -892,7 +892,7 @@ static ssize_t mem_rw(struct file *file, char __user *buf,
 
 	mmput(mm);
 free:
-	free_page((unsigned long) page);
+	free_page(page);
 	return copied;
 }
 
@@ -997,7 +997,7 @@ static ssize_t environ_read(struct file *file, char __user *buf,
 	mmput(mm);
 
 free:
-	free_page((unsigned long) page);
+	free_page(page);
 	return ret;
 }
 
@@ -1604,7 +1604,7 @@ static int do_proc_readlink(struct path *path, char __user *buffer, int buflen)
 	if (copy_to_user(buffer, pathname, len))
 		len = -EFAULT;
  out:
-	free_page((unsigned long)tmp);
+	free_page(tmp);
 	return len;
 }
 
@@ -2393,7 +2393,7 @@ static ssize_t proc_pid_attr_write(struct file * file, const char __user * buf,
 				      (void*)page, count);
 	mutex_unlock(&task->signal->cred_guard_mutex);
 out_free:
-	free_page((unsigned long) page);
+	free_page(page);
 out:
 	put_task_struct(task);
 out_no_task:
diff --git a/fs/select.c b/fs/select.c
index 0155473..6acb0ae 100644
--- a/fs/select.c
+++ b/fs/select.c
@@ -150,7 +150,7 @@ void poll_freewait(struct poll_wqueues *pwq)
 		} while (entry > p->entries);
 		old = p;
 		p = p->next;
-		free_page((unsigned long) old);
+		free_page(old);
 	}
 }
 EXPORT_SYMBOL(poll_freewait);
diff --git a/include/asm-generic/page.h b/include/asm-generic/page.h
index 37d1fe2..6c731ec 100644
--- a/include/asm-generic/page.h
+++ b/include/asm-generic/page.h
@@ -25,7 +25,7 @@
 #ifndef __ASSEMBLY__
 
 #define get_user_page(vaddr)		__get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)	free_page(addr)
+#define free_user_page(page, addr)	free_page((void *)addr)
 
 #define clear_page(page)	memset((page), 0, PAGE_SIZE)
 #define copy_page(to,from)	memcpy((to), (from), PAGE_SIZE)
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 8942af0..54c6efd 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -500,7 +500,7 @@ extern void __free_kmem_pages(struct page *page, unsigned int order);
 extern void free_kmem_pages(unsigned long addr, unsigned int order);
 
 #define __free_page(page) __free_pages((page), 0)
-#define free_page(addr) free_pages((addr), 0)
+#define free_page(addr) free_pages((unsigned long)(addr), 0)
 
 void page_alloc_init(void);
 void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp);
diff --git a/include/linux/security.h b/include/linux/security.h
index 2f4c1f7..c1ad479 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -1623,7 +1623,7 @@ static inline char *alloc_secdata(void)
 
 static inline void free_secdata(void *secdata)
 {
-	free_page((unsigned long)secdata);
+	free_page(secdata);
 }
 
 #else
diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c
index adfdc05..825c4724 100644
--- a/kernel/events/ring_buffer.c
+++ b/kernel/events/ring_buffer.c
@@ -650,9 +650,9 @@ struct ring_buffer *rb_alloc(int nr_pages, long watermark, int cpu, int flags)
 
 fail_data_pages:
 	for (i--; i >= 0; i--)
-		free_page((unsigned long)rb->data_pages[i]);
+		free_page(rb->data_pages[i]);
 
-	free_page((unsigned long)rb->user_page);
+	free_page(rb->user_page);
 
 fail_user_page:
 	kfree(rb);
diff --git a/kernel/groups.c b/kernel/groups.c
index 74d431d..88f7e1a8 100644
--- a/kernel/groups.c
+++ b/kernel/groups.c
@@ -40,7 +40,7 @@ struct group_info *groups_alloc(int gidsetsize)
 
 out_undo_partial_alloc:
 	while (--i >= 0) {
-		free_page((unsigned long)group_info->blocks[i]);
+		free_page(group_info->blocks[i]);
 	}
 	kfree(group_info);
 	return NULL;
@@ -53,7 +53,7 @@ void groups_free(struct group_info *group_info)
 	if (group_info->blocks[0] != group_info->small_block) {
 		int i;
 		for (i = 0; i < group_info->nblocks; i++)
-			free_page((unsigned long)group_info->blocks[i]);
+			free_page(group_info->blocks[i]);
 	}
 	kfree(group_info);
 }
diff --git a/kernel/power/swap.c b/kernel/power/swap.c
index 12cd989..5bbe897 100644
--- a/kernel/power/swap.c
+++ b/kernel/power/swap.c
@@ -384,7 +384,7 @@ static int write_page(void *buf, sector_t offset, struct hib_bio_batch *hb)
 static void release_swap_writer(struct swap_map_handle *handle)
 {
 	if (handle->cur)
-		free_page((unsigned long)handle->cur);
+		free_page(handle->cur);
 	handle->cur = NULL;
 }
 
@@ -853,7 +853,7 @@ out_clean:
 				kthread_stop(data[thr].thr);
 		vfree(data);
 	}
-	if (page) free_page((unsigned long)page);
+	if (page) free_page(page);
 
 	return ret;
 }
@@ -938,7 +938,7 @@ static void release_swap_reader(struct swap_map_handle *handle)
 
 	while (handle->maps) {
 		if (handle->maps->map)
-			free_page((unsigned long)handle->maps->map);
+			free_page(handle->maps->map);
 		tmp = handle->maps;
 		handle->maps = handle->maps->next;
 		kfree(tmp);
@@ -1010,7 +1010,7 @@ static int swap_read_page(struct swap_map_handle *handle, void *buf,
 		return error;
 	if (++handle->k >= MAP_PAGE_ENTRIES) {
 		handle->k = 0;
-		free_page((unsigned long)handle->maps->map);
+		free_page(handle->maps->map);
 		tmp = handle->maps;
 		handle->maps = handle->maps->next;
 		kfree(tmp);
@@ -1440,7 +1440,7 @@ out_finish:
 	swsusp_show_speed(start, stop, nr_to_read, "Read");
 out_clean:
 	for (i = 0; i < ring_size; i++)
-		free_page((unsigned long)page[i]);
+		free_page(page[i]);
 	if (crc) {
 		if (crc->thr)
 			kthread_stop(crc->thr);
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index dc6858d..8e9cfe4 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -2128,7 +2128,7 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table,
 		left -= proc_skip_spaces(&kbuf);
 free:
 	if (write) {
-		free_page(page);
+		free_page((void *)page);
 		if (first)
 			return err ? : -EINVAL;
 	}
@@ -2388,7 +2388,7 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int
 		left -= proc_skip_spaces(&kbuf);
 free:
 	if (write) {
-		free_page(page);
+		free_page((void *)page);
 		if (first)
 			return err ? : -EINVAL;
 	}
@@ -2661,7 +2661,7 @@ int proc_do_large_bitmap(struct ctl_table *table, int write,
 		if (!kbuf)
 			return -ENOMEM;
 		if (copy_from_user(kbuf, buffer, left)) {
-			free_page(page);
+			free_page((void *)page);
 			return -EFAULT;
                 }
 		kbuf[left] = 0;
@@ -2669,7 +2669,7 @@ int proc_do_large_bitmap(struct ctl_table *table, int write,
 		tmp_bitmap = kzalloc(BITS_TO_LONGS(bitmap_len) * sizeof(unsigned long),
 				     GFP_KERNEL);
 		if (!tmp_bitmap) {
-			free_page(page);
+			free_page((void *)page);
 			return -ENOMEM;
 		}
 		proc_skip_char(&kbuf, &left, '\n');
@@ -2713,7 +2713,7 @@ int proc_do_large_bitmap(struct ctl_table *table, int write,
 			first = 0;
 			proc_skip_char(&kbuf, &left, '\n');
 		}
-		free_page(page);
+		free_page((void *)page);
 	} else {
 		unsigned long bit_a, bit_b = 0;
 
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 3f743b1..14703bb 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -744,7 +744,7 @@ int ftrace_profile_pages_init(struct ftrace_profile_stat *stat)
 		unsigned long tmp = (unsigned long)pg;
 
 		pg = pg->next;
-		free_page(tmp);
+		free_page((void *)tmp);
 	}
 
 	stat->pages = NULL;
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 9c6045a..26aad80 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -341,7 +341,7 @@ size_t ring_buffer_page_len(void *page)
  */
 static void free_buffer_page(struct buffer_page *bpage)
 {
-	free_page((unsigned long)bpage->page);
+	free_page(bpage->page);
 	kfree(bpage);
 }
 
@@ -4437,7 +4437,7 @@ EXPORT_SYMBOL_GPL(ring_buffer_alloc_read_page);
  */
 void ring_buffer_free_read_page(struct ring_buffer *buffer, void *data)
 {
-	free_page((unsigned long)data);
+	free_page(data);
 }
 EXPORT_SYMBOL_GPL(ring_buffer_free_read_page);
 
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 4f6ef69..f2e26df 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -1345,7 +1345,7 @@ event_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
 		return -ENOMEM;
 
 	if (copy_from_user(buf, ubuf, cnt)) {
-		free_page((unsigned long) buf);
+		free_page(buf);
 		return -EFAULT;
 	}
 	buf[cnt] = '\0';
@@ -1356,7 +1356,7 @@ event_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
 		err = apply_event_filter(file, buf);
 	mutex_unlock(&event_mutex);
 
-	free_page((unsigned long) buf);
+	free_page(buf);
 	if (err < 0)
 		return err;
 
@@ -1512,13 +1512,13 @@ subsystem_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
 		return -ENOMEM;
 
 	if (copy_from_user(buf, ubuf, cnt)) {
-		free_page((unsigned long) buf);
+		free_page(buf);
 		return -EFAULT;
 	}
 	buf[cnt] = '\0';
 
 	err = apply_subsystem_event_filter(dir, buf);
-	free_page((unsigned long) buf);
+	free_page(buf);
 	if (err < 0)
 		return err;
 
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index f93a219..234b5b9e 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -684,7 +684,7 @@ static void append_filter_err(struct filter_parse_state *ps,
 
 	sprintf(pbuf, "\nparse_error: %s\n", err_text[ps->lasterr]);
 	append_filter_string(filter, buf);
-	free_page((unsigned long) buf);
+	free_page(buf);
 }
 
 static inline struct event_filter *event_filter(struct trace_event_file *file)
diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c
index 42a4009..0796e61 100644
--- a/kernel/trace/trace_events_trigger.c
+++ b/kernel/trace/trace_events_trigger.c
@@ -242,7 +242,7 @@ static ssize_t event_trigger_regex_write(struct file *file,
 		return -ENOMEM;
 
 	if (copy_from_user(buf, ubuf, cnt)) {
-		free_page((unsigned long)buf);
+		free_page(buf);
 		return -EFAULT;
 	}
 	buf[cnt] = '\0';
@@ -252,13 +252,13 @@ static ssize_t event_trigger_regex_write(struct file *file,
 	event_file = event_file_data(file);
 	if (unlikely(!event_file)) {
 		mutex_unlock(&event_mutex);
-		free_page((unsigned long)buf);
+		free_page(buf);
 		return -ENODEV;
 	}
 	ret = trigger_process_regex(event_file, buf);
 	mutex_unlock(&event_mutex);
 
-	free_page((unsigned long)buf);
+	free_page(buf);
 	if (ret < 0)
 		goto out;
 
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
index d2f6d0b..da18327 100644
--- a/kernel/trace/trace_uprobe.c
+++ b/kernel/trace/trace_uprobe.c
@@ -722,7 +722,7 @@ err:
 	for_each_possible_cpu(cpu) {
 		if (cpu == err_cpu)
 			break;
-		free_page((unsigned long)per_cpu_ptr(uprobe_cpu_buffer, cpu)->buf);
+		free_page(per_cpu_ptr(uprobe_cpu_buffer, cpu)->buf);
 	}
 
 	free_percpu(uprobe_cpu_buffer);
@@ -752,8 +752,7 @@ static void uprobe_buffer_disable(void)
 
 	if (--uprobe_buffer_refcnt == 0) {
 		for_each_possible_cpu(cpu)
-			free_page((unsigned long)per_cpu_ptr(uprobe_cpu_buffer,
-							     cpu)->buf);
+			free_page(per_cpu_ptr(uprobe_cpu_buffer, cpu)->buf);
 
 		free_percpu(uprobe_cpu_buffer);
 		uprobe_cpu_buffer = NULL;
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
index 88fefa6..b01948c 100644
--- a/kernel/user_namespace.c
+++ b/kernel/user_namespace.c
@@ -757,7 +757,7 @@ static ssize_t map_write(struct file *file, const char __user *buf,
 out:
 	mutex_unlock(&userns_state_mutex);
 	if (page)
-		free_page(page);
+		free_page((void *)page);
 	return ret;
 }
 
diff --git a/lib/scatterlist.c b/lib/scatterlist.c
index bafa993..6f44c3e 100644
--- a/lib/scatterlist.c
+++ b/lib/scatterlist.c
@@ -184,7 +184,7 @@ static void sg_kfree(struct scatterlist *sg, unsigned int nents)
 {
 	if (nents == SG_MAX_SINGLE_ALLOC) {
 		kmemleak_free(sg);
-		free_page((unsigned long) sg);
+		free_page(sg);
 	} else
 		kfree(sg);
 }
diff --git a/mm/memory.c b/mm/memory.c
index c387430..47f8f87 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -344,7 +344,7 @@ static void tlb_remove_table_rcu(struct rcu_head *head)
 	for (i = 0; i < batch->nr; i++)
 		__tlb_remove_table(batch->tables[i]);
 
-	free_page((unsigned long)batch);
+	free_page(batch);
 }
 
 void tlb_table_flush(struct mmu_gather *tlb)
@@ -3772,7 +3772,7 @@ void print_vma_addr(char *prefix, unsigned long ip)
 			printk("%s%s[%lx+%lx]", prefix, kbasename(p),
 					vma->vm_start,
 					vma->vm_end - vma->vm_start);
-			free_page((unsigned long)buf);
+			free_page(buf);
 		}
 	}
 	up_read(&mm->mmap_sem);
diff --git a/mm/migrate.c b/mm/migrate.c
index 7890d0b..7aeba9a 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -1389,7 +1389,7 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes,
 	err = 0;
 
 out_pm:
-	free_page((unsigned long)pm);
+	free_page(pm);
 out:
 	return err;
 }
diff --git a/mm/mincore.c b/mm/mincore.c
index 14bb9fb..077ef0e 100644
--- a/mm/mincore.c
+++ b/mm/mincore.c
@@ -264,6 +264,6 @@ SYSCALL_DEFINE3(mincore, unsigned long, start, size_t, len,
 		start += retval << PAGE_SHIFT;
 		retval = 0;
 	}
-	free_page((unsigned long) tmp);
+	free_page(tmp);
 	return retval;
 }
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 9d666df..e68689c 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3458,7 +3458,7 @@ static void *make_alloc_exact(unsigned long addr, unsigned int order,
 
 		split_page(virt_to_page((void *)addr), order);
 		while (used < alloc_end) {
-			free_page(used);
+			free_page((void *)used);
 			used += PAGE_SIZE;
 		}
 	}
@@ -3520,7 +3520,7 @@ void free_pages_exact(void *virt, size_t size)
 	unsigned long end = addr + PAGE_ALIGN(size);
 
 	while (addr < end) {
-		free_page(addr);
+		free_page((void *)addr);
 		addr += PAGE_SIZE;
 	}
 }
diff --git a/mm/quicklist.c b/mm/quicklist.c
index 9422129..d7d095c 100644
--- a/mm/quicklist.c
+++ b/mm/quicklist.c
@@ -79,7 +79,7 @@ void quicklist_trim(int nr, void (*dtor)(void *),
 
 			if (dtor)
 				dtor(p);
-			free_page((unsigned long)p);
+			free_page(p);
 			pages_to_free--;
 		}
 	}
diff --git a/mm/slub.c b/mm/slub.c
index 4699751..b50b454 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -5290,7 +5290,7 @@ static void memcg_propagate_slab_attrs(struct kmem_cache *s)
 	}
 
 	if (buffer)
-		free_page((unsigned long)buffer);
+		free_page(buffer);
 #endif
 }
 
diff --git a/net/atm/mpoa_proc.c b/net/atm/mpoa_proc.c
index 2df34eb..a2721ae 100644
--- a/net/atm/mpoa_proc.c
+++ b/net/atm/mpoa_proc.c
@@ -221,7 +221,7 @@ static ssize_t proc_mpc_write(struct file *file, const char __user *buff,
 
 	for (p = page, len = 0; len < nbytes; p++, len++) {
 		if (get_user(*p, buff++)) {
-			free_page((unsigned long)page);
+			free_page(page);
 			return -EFAULT;
 		}
 		if (*p == '\0' || *p == '\n')
@@ -233,7 +233,7 @@ static ssize_t proc_mpc_write(struct file *file, const char __user *buff,
 	if (!parse_qos(page))
 		printk("mpoa: proc_mpc_write: could not parse '%s'\n", page);
 
-	free_page((unsigned long)page);
+	free_page(page);
 
 	return len;
 }
diff --git a/net/atm/proc.c b/net/atm/proc.c
index bbb6461..2523c58 100644
--- a/net/atm/proc.c
+++ b/net/atm/proc.c
@@ -398,7 +398,7 @@ static ssize_t proc_dev_atm_read(struct file *file, char __user *buf,
 			length = -EFAULT;
 		(*pos)++;
 	}
-	free_page(page);
+	free_page((void *)page);
 	return length;
 }
 
diff --git a/net/core/dev.c b/net/core/dev.c
index ae00b89..7887d72 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1054,7 +1054,7 @@ static int __dev_alloc_name(struct net *net, const char *name, char *buf)
 		}
 
 		i = find_first_zero_bit(inuse, max_netdevices);
-		free_page((unsigned long) inuse);
+		free_page(inuse);
 	}
 
 	if (buf != name)
diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index 93cc473..6514ce1 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -2438,7 +2438,7 @@ cont:
 			memset(inuse, 0, PAGE_SIZE);
 			goto cont;
 		}
-		free_page((unsigned long)inuse);
+		free_page(inuse);
 	}
 
 	snprintf(set->name, sizeof(set->name), name, min + n);
diff --git a/net/rds/cong.c b/net/rds/cong.c
index e6144b8..15d4725 100644
--- a/net/rds/cong.c
+++ b/net/rds/cong.c
@@ -167,7 +167,7 @@ static struct rds_cong_map *rds_cong_from_addr(__be32 addr)
 out:
 	if (map) {
 		for (i = 0; i < RDS_CONG_MAP_PAGES && map->m_page_addrs[i]; i++)
-			free_page(map->m_page_addrs[i]);
+			free_page((void *)map->m_page_addrs[i]);
 		kfree(map);
 	}
 
@@ -399,7 +399,7 @@ void rds_cong_exit(void)
 		rdsdebug("freeing map %p\n", map);
 		rb_erase(&map->m_rb_node, &rds_cong_tree);
 		for (i = 0; i < RDS_CONG_MAP_PAGES && map->m_page_addrs[i]; i++)
-			free_page(map->m_page_addrs[i]);
+			free_page((void *)map->m_page_addrs[i]);
 		kfree(map);
 	}
 }
diff --git a/net/sunrpc/backchannel_rqst.c b/net/sunrpc/backchannel_rqst.c
index 229956b..be77bca 100644
--- a/net/sunrpc/backchannel_rqst.c
+++ b/net/sunrpc/backchannel_rqst.c
@@ -63,9 +63,9 @@ static void xprt_free_allocation(struct rpc_rqst *req)
 	dprintk("RPC:        free allocations for req= %p\n", req);
 	WARN_ON_ONCE(test_bit(RPC_BC_PA_IN_USE, &req->rq_bc_pa_state));
 	xbufp = &req->rq_rcv_buf;
-	free_page((unsigned long)xbufp->head[0].iov_base);
+	free_page(xbufp->head[0].iov_base);
 	xbufp = &req->rq_snd_buf;
-	free_page((unsigned long)xbufp->head[0].iov_base);
+	free_page(xbufp->head[0].iov_base);
 	kfree(req);
 }
 
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 2ffaf6a..dbbc520 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -2529,7 +2529,7 @@ static void bc_free(void *buffer)
 		return;
 
 	buf = container_of(buffer, struct rpc_buffer, data);
-	free_page((unsigned long)buf);
+	free_page(buf);
 }
 
 /*
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index d0cfaa9..dba9f5f 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -1277,7 +1277,7 @@ static int selinux_genfs_get_sid(struct dentry *dentry,
 		}
 		rc = security_genfs_sid(sb->s_type->name, path, tclass, sid);
 	}
-	free_page((unsigned long)buffer);
+	free_page(buffer);
 	return rc;
 }
 
@@ -2579,7 +2579,7 @@ static int selinux_sb_copy_data(char *orig, char *copy)
 	} while (*in_end++);
 
 	strcpy(in_save, nosec_save);
-	free_page((unsigned long)nosec_save);
+	free_page(nosec_save);
 out:
 	return rc;
 }
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
index c02da25..c4de69b 100644
--- a/security/selinux/selinuxfs.c
+++ b/security/selinux/selinuxfs.c
@@ -186,7 +186,7 @@ static ssize_t sel_write_enforce(struct file *file, const char __user *buf,
 	}
 	length = count;
 out:
-	free_page((unsigned long) page);
+	free_page(page);
 	return length;
 }
 #else
@@ -313,7 +313,7 @@ static ssize_t sel_write_disable(struct file *file, const char __user *buf,
 
 	length = count;
 out:
-	free_page((unsigned long) page);
+	free_page(page);
 	return length;
 }
 #else
@@ -644,7 +644,7 @@ static ssize_t sel_write_checkreqprot(struct file *file, const char __user *buf,
 	selinux_checkreqprot = new_value ? 1 : 0;
 	length = count;
 out:
-	free_page((unsigned long) page);
+	free_page(page);
 	return length;
 }
 static const struct file_operations sel_checkreqprot_ops = {
@@ -1068,7 +1068,7 @@ static ssize_t sel_read_bool(struct file *filep, char __user *buf,
 	ret = simple_read_from_buffer(buf, count, ppos, page, length);
 out:
 	mutex_unlock(&sel_mutex);
-	free_page((unsigned long)page);
+	free_page(page);
 	return ret;
 }
 
@@ -1121,7 +1121,7 @@ static ssize_t sel_write_bool(struct file *filep, const char __user *buf,
 
 out:
 	mutex_unlock(&sel_mutex);
-	free_page((unsigned long) page);
+	free_page(page);
 	return length;
 }
 
@@ -1176,7 +1176,7 @@ static ssize_t sel_commit_bools_write(struct file *filep,
 
 out:
 	mutex_unlock(&sel_mutex);
-	free_page((unsigned long) page);
+	free_page(page);
 	return length;
 }
 
@@ -1257,10 +1257,10 @@ static int sel_make_bools(void)
 	bool_pending_names = names;
 	bool_pending_values = values;
 
-	free_page((unsigned long)page);
+	free_page(page);
 	return 0;
 out:
-	free_page((unsigned long)page);
+	free_page(page);
 
 	if (names) {
 		for (i = 0; i < num; i++)
@@ -1326,7 +1326,7 @@ static ssize_t sel_write_avc_cache_threshold(struct file *file,
 
 	ret = count;
 out:
-	free_page((unsigned long)page);
+	free_page(page);
 	return ret;
 }
 
@@ -1343,7 +1343,7 @@ static ssize_t sel_read_avc_hash_stats(struct file *filp, char __user *buf,
 	length = avc_get_hash_stats(page);
 	if (length >= 0)
 		length = simple_read_from_buffer(buf, count, ppos, page, length);
-	free_page((unsigned long)page);
+	free_page(page);
 
 	return length;
 }
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
index ff81026..1f7a580 100644
--- a/security/smack/smack_lsm.c
+++ b/security/smack/smack_lsm.c
@@ -611,7 +611,7 @@ static int smack_sb_copy_data(char *orig, char *smackopts)
 	}
 
 	strcpy(orig, otheropts);
-	free_page((unsigned long)otheropts);
+	free_page(otheropts);
 
 	return 0;
 }
diff --git a/sound/drivers/dummy.c b/sound/drivers/dummy.c
index 016e451..fb5730db 100644
--- a/sound/drivers/dummy.c
+++ b/sound/drivers/dummy.c
@@ -619,7 +619,7 @@ static void free_fake_buffer(void)
 		int i;
 		for (i = 0; i < 2; i++)
 			if (dummy_page[i]) {
-				free_page((unsigned long)dummy_page[i]);
+				free_page(dummy_page[i]);
 				dummy_page[i] = NULL;
 			}
 	}
diff --git a/sound/oss/msnd_pinnacle.c b/sound/oss/msnd_pinnacle.c
index a8bb4a0..8aa54fc 100644
--- a/sound/oss/msnd_pinnacle.c
+++ b/sound/oss/msnd_pinnacle.c
@@ -918,7 +918,7 @@ static int dsp_read(char __user *buf, size_t len)
 		n = msnd_fifo_read(&dev.DARF, page, k);
 		spin_unlock_irqrestore(&dev.lock, flags);
 		if (copy_to_user(buf, page, n)) {
-			free_page((unsigned long)page);
+			free_page(page);
 			return -EFAULT;
 		}
 		buf += n;
@@ -934,7 +934,7 @@ static int dsp_read(char __user *buf, size_t len)
 		}
 
 		if (dev.rec_ndelay) {
-			free_page((unsigned long)page);
+			free_page(page);
 			return count == len ? -EAGAIN : len - count;
 		}
 
@@ -946,12 +946,12 @@ static int dsp_read(char __user *buf, size_t len)
 					timeout) <= 0)
 				clear_bit(F_READING, &dev.flags);
 			if (signal_pending(current)) {
-				free_page((unsigned long)page);
+				free_page(page);
 				return -EINTR;
 			}
 		}
 	}
-	free_page((unsigned long)page);
+	free_page(page);
 	return len - count;
 }
 
@@ -973,7 +973,7 @@ static int dsp_write(const char __user *buf, size_t len)
 			k = count;
 
 		if (copy_from_user(page, buf, k)) {
-			free_page((unsigned long)page);
+			free_page(page);
 			return -EFAULT;
 		}
 
@@ -994,7 +994,7 @@ static int dsp_write(const char __user *buf, size_t len)
 		}
 
 		if (dev.play_ndelay) {
-			free_page((unsigned long)page);
+			free_page(page);
 			return count == len ? -EAGAIN : len - count;
 		}
 
@@ -1005,13 +1005,13 @@ static int dsp_write(const char __user *buf, size_t len)
 				test_bit(F_WRITEBLOCK, &dev.flags),
 				timeout);
 			if (signal_pending(current)) {
-				free_page((unsigned long)page);
+				free_page(page);
 				return -EINTR;
 			}
 		}
 	}
 
-	free_page((unsigned long)page);
+	free_page(page);
 	return len - count;
 }
 
diff --git a/sound/oss/vidc.c b/sound/oss/vidc.c
index 92ca5be..b73fcc3 100644
--- a/sound/oss/vidc.c
+++ b/sound/oss/vidc.c
@@ -497,7 +497,7 @@ irq_failed:
 dma_failed:
 mem_failed:
 	for (i = 0; i < 2; i++)
-		free_page(dma_buf[i]);
+		free_page((void *)dma_buf[i]);
 	sound_unload_mixerdev(audio_devs[adev]->mixer_dev);
 mixer_failed:
 	sound_unload_audiodev(adev);
@@ -528,7 +528,7 @@ static void __exit unload_vidc(struct address_info *hw_config)
 		sound_unload_mixerdev(audio_devs[adev]->mixer_dev);
 		sound_unload_audiodev(adev);
 		for (i = 0; i < 2; i++)
-			free_page(dma_buf[i]);
+			free_page((void *)dma_buf[i]);
 	}
 }
 
diff --git a/sound/pci/emu10k1/memory.c b/sound/pci/emu10k1/memory.c
index 4f1f69b..2c2b73d 100644
--- a/sound/pci/emu10k1/memory.c
+++ b/sound/pci/emu10k1/memory.c
@@ -453,7 +453,7 @@ static void __synth_free_pages(struct snd_emu10k1 *emu, int first_page,
 	int page;
 
 	for (page = first_page; page <= last_page; page++) {
-		free_page((unsigned long)emu->page_ptr_table[page]);
+		free_page(emu->page_ptr_table[page]);
 		emu->page_addr_table[page] = 0;
 		emu->page_ptr_table[page] = NULL;
 	}
diff --git a/tools/virtio/linux/kernel.h b/tools/virtio/linux/kernel.h
index 4db7d56..9e64717 100644
--- a/tools/virtio/linux/kernel.h
+++ b/tools/virtio/linux/kernel.h
@@ -77,9 +77,9 @@ static inline unsigned long __get_free_page(gfp_t gfp)
 	return (unsigned long)p;
 }
 
-static inline void free_page(unsigned long addr)
+static inline void free_page(void *addr)
 {
-	free((void *)addr);
+	free(addr);
 }
 
 #define container_of(ptr, type, member) ({			\
diff --git a/virt/kvm/coalesced_mmio.c b/virt/kvm/coalesced_mmio.c
index 571c1ce..5fcb1ef 100644
--- a/virt/kvm/coalesced_mmio.c
+++ b/virt/kvm/coalesced_mmio.c
@@ -130,7 +130,7 @@ out_err:
 void kvm_coalesced_mmio_free(struct kvm *kvm)
 {
 	if (kvm->coalesced_mmio_ring)
-		free_page((unsigned long)kvm->coalesced_mmio_ring);
+		free_page(kvm->coalesced_mmio_ring);
 }
 
 int kvm_vm_ioctl_register_coalesced_mmio(struct kvm *kvm,
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 484079e..e2353b2 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -250,7 +250,7 @@ int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id)
 	return 0;
 
 fail_free_run:
-	free_page((unsigned long)vcpu->run);
+	free_page(vcpu->run);
 fail:
 	return r;
 }
@@ -260,7 +260,7 @@ void kvm_vcpu_uninit(struct kvm_vcpu *vcpu)
 {
 	put_pid(vcpu->pid);
 	kvm_arch_vcpu_uninit(vcpu);
-	free_page((unsigned long)vcpu->run);
+	free_page(vcpu->run);
 }
 EXPORT_SYMBOL_GPL(kvm_vcpu_uninit);
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 02/83] switch free_pages() from unsigned long to const void *
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
  2015-12-21 23:46 ` [POC][PATCH 01/83] switch free_page() from unsigned long to const void * Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 03/83] switch get_zeroed_page() to returning " Al Viro
                   ` (81 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/alpha/include/asm/agp.h                       |  2 +-
 arch/alpha/kernel/pci-noop.c                       |  2 +-
 arch/alpha/kernel/pci_iommu.c                      |  4 ++--
 arch/arc/include/asm/pgalloc.h                     |  6 +++---
 arch/arm/include/asm/tlb.h                         |  2 +-
 arch/arm/kvm/mmu.c                                 |  4 ++--
 arch/arm/mm/pgd.c                                  |  2 +-
 arch/blackfin/include/asm/mmu_context.h            |  2 +-
 arch/cris/arch-v32/drivers/pci/dma.c               |  2 +-
 arch/frv/mm/dma-alloc.c                            |  2 +-
 arch/h8300/kernel/dma.c                            |  2 +-
 arch/ia64/hp/common/sba_iommu.c                    |  2 +-
 arch/ia64/include/asm/agp.h                        |  2 +-
 arch/ia64/include/asm/thread_info.h                |  2 +-
 arch/ia64/include/asm/tlb.h                        |  2 +-
 arch/ia64/kernel/uncached.c                        |  2 +-
 arch/ia64/sn/pci/pci_dma.c                         |  4 ++--
 arch/ia64/sn/pci/tioca_provider.c                  |  2 +-
 arch/m68k/kernel/dma.c                             |  2 +-
 arch/m68k/sun3/sun3dvma.c                          |  4 ++--
 arch/microblaze/kernel/dma.c                       |  2 +-
 arch/microblaze/mm/consistent.c                    |  4 ++--
 arch/mips/include/asm/mach-generic/floppy.h        |  2 +-
 arch/mips/include/asm/mach-jazz/floppy.h           |  2 +-
 arch/mips/include/asm/pgalloc.h                    |  6 +++---
 arch/mips/mm/dma-default.c                         |  2 +-
 arch/mn10300/mm/dma-alloc.c                        |  2 +-
 arch/nios2/include/asm/pgalloc.h                   |  4 ++--
 arch/nios2/mm/dma-mapping.c                        |  2 +-
 arch/parisc/include/asm/agp.h                      |  2 +-
 arch/parisc/include/asm/floppy.h                   |  2 +-
 arch/parisc/include/asm/pgalloc.h                  |  4 ++--
 arch/parisc/kernel/pci-dma.c                       |  4 ++--
 arch/powerpc/include/asm/agp.h                     |  2 +-
 arch/powerpc/kernel/dma.c                          |  2 +-
 arch/powerpc/kernel/iommu.c                        |  6 +++---
 arch/powerpc/kvm/book3s_64_mmu_hv.c                |  4 ++--
 arch/powerpc/kvm/booke.c                           |  2 +-
 arch/powerpc/mm/init_64.c                          |  3 +--
 arch/powerpc/mm/pgtable_32.c                       |  2 +-
 arch/powerpc/platforms/cell/spufs/inode.c          |  2 +-
 arch/powerpc/platforms/powernv/pci-ioda.c          |  2 +-
 arch/powerpc/platforms/ps3/system-bus.c            |  4 ++--
 arch/s390/hypfs/hypfs_diag.c                       |  2 +-
 arch/s390/include/asm/idals.h                      |  5 ++---
 arch/s390/kernel/smp.c                             |  8 ++++----
 arch/s390/kernel/suspend.c                         |  2 +-
 arch/s390/kernel/vdso.c                            |  4 ++--
 arch/s390/mm/pgtable.c                             |  4 ++--
 arch/s390/pci/pci_clp.c                            |  2 +-
 arch/s390/pci/pci_dma.c                            |  4 ++--
 arch/score/include/asm/pgalloc.h                   |  4 ++--
 arch/sh/mm/consistent.c                            |  2 +-
 arch/sparc/include/asm/agp.h                       |  2 +-
 arch/sparc/kernel/iommu.c                          |  4 ++--
 arch/sparc/kernel/ioport.c                         |  6 +++---
 arch/sparc/kernel/ldc.c                            |  6 +++---
 arch/sparc/kernel/pci_fire.c                       |  2 +-
 arch/sparc/kernel/pci_sun4v.c                      |  8 ++++----
 arch/um/drivers/net_kern.c                         |  2 +-
 arch/um/kernel/process.c                           |  2 +-
 arch/unicore32/mm/pgd.c                            |  4 ++--
 arch/x86/include/asm/agp.h                         |  2 +-
 arch/x86/include/asm/floppy.h                      |  2 +-
 arch/x86/include/asm/xen/page-coherent.h           |  2 +-
 arch/x86/kernel/pci-calgary_64.c                   |  6 +++---
 arch/x86/kernel/pci-dma.c                          |  2 +-
 arch/x86/kvm/vmx.c                                 |  2 +-
 arch/x86/mm/init_64.c                              |  2 +-
 arch/x86/platform/efi/efi.c                        |  4 ++--
 arch/x86/um/ldt.c                                  |  2 +-
 arch/x86/xen/pmu.c                                 |  4 ++--
 arch/xtensa/kernel/pci-dma.c                       |  2 +-
 crypto/xor.c                                       |  2 +-
 drivers/base/devres.c                              |  4 ++--
 drivers/block/floppy.c                             |  2 +-
 drivers/block/ps3vram.c                            |  4 ++--
 drivers/block/xen-blkfront.c                       |  4 ++--
 drivers/block/zram/zcomp.c                         |  2 +-
 drivers/char/agp/hp-agp.c                          |  2 +-
 drivers/char/agp/uninorth-agp.c                    |  4 ++--
 drivers/char/mbcs.c                                |  4 ++--
 drivers/crypto/omap-aes.c                          |  4 ++--
 drivers/crypto/omap-des.c                          |  4 ++--
 drivers/dma/ste_dma40.c                            |  6 +++---
 drivers/firmware/dell_rbu.c                        |  9 ++++-----
 drivers/gpu/drm/amd/amdkfd/kfd_events.c            |  2 +-
 drivers/hv/channel.c                               |  4 ++--
 drivers/hv/connection.c                            |  6 +++---
 drivers/infiniband/hw/qib/qib_dma.c                |  2 +-
 drivers/iommu/amd_iommu_init.c                     | 21 ++++++++-------------
 drivers/iommu/exynos-iommu.c                       |  6 +++---
 drivers/iommu/fsl_pamu.c                           |  2 +-
 drivers/iommu/intel-svm.c                          |  8 ++++----
 drivers/iommu/intel_irq_remapping.c                |  2 +-
 drivers/iommu/msm_iommu.c                          |  2 +-
 drivers/md/bcache/bset.c                           | 10 ++++------
 drivers/md/bcache/btree.c                          |  2 +-
 drivers/md/bcache/journal.c                        |  4 ++--
 drivers/md/bcache/super.c                          |  4 ++--
 drivers/md/dm-bufio.c                              |  2 +-
 drivers/media/pci/solo6x10/solo6x10-p2m.c          |  6 +++---
 drivers/media/platform/davinci/dm644x_ccdc.c       |  4 ++--
 drivers/media/platform/omap/omap_voutlib.c         |  2 +-
 drivers/misc/cxl/native.c                          |  2 +-
 drivers/misc/mic/card/mic_virtio.c                 |  2 +-
 drivers/misc/mic/host/mic_virtio.c                 | 11 ++++-------
 drivers/misc/mic/scif/scif_rma.h                   |  2 +-
 drivers/misc/sgi-gru/grufile.c                     |  4 ++--
 drivers/misc/sgi-xp/xpc_uv.c                       |  4 ++--
 drivers/mmc/host/tmio_mmc_dma.c                    |  2 +-
 drivers/net/appletalk/ltpc.c                       |  4 ++--
 drivers/net/ethernet/amd/mvme147.c                 |  4 ++--
 drivers/net/ethernet/cavium/liquidio/octeon_main.h |  4 ++--
 drivers/net/ethernet/cirrus/cs89x0.c               |  2 +-
 drivers/net/ethernet/sgi/ioc3-eth.c                |  2 +-
 drivers/net/ethernet/sun/niu.c                     |  2 +-
 drivers/net/ethernet/tile/tilegx.c                 |  6 ++----
 drivers/net/irda/au1k_ir.c                         |  2 +-
 drivers/net/rionet.c                               |  2 +-
 drivers/net/wireless/b43/debugfs.c                 |  4 ++--
 drivers/net/wireless/b43legacy/debugfs.c           |  4 ++--
 drivers/net/wireless/iwlegacy/common.h             |  2 +-
 drivers/net/wireless/iwlwifi/iwl-trans.h           |  2 +-
 drivers/net/wireless/ti/wlcore/main.c              |  4 ++--
 drivers/parisc/ccio-dma.c                          |  2 +-
 drivers/parisc/ccio-rm-dma.c                       |  2 +-
 drivers/parisc/sba_iommu.c                         | 14 +++++++-------
 drivers/pci/host/pci-tegra.c                       |  2 +-
 drivers/pci/host/pcie-xilinx.c                     |  2 +-
 drivers/s390/block/dasd.c                          |  4 ++--
 drivers/s390/char/hmcdrv_cache.c                   |  2 +-
 drivers/s390/char/hmcdrv_ftp.c                     |  2 +-
 drivers/s390/char/tty3270.c                        |  4 ++--
 drivers/s390/char/vmcp.c                           |  5 ++---
 drivers/s390/cio/cmf.c                             |  4 ++--
 drivers/scsi/cxlflash/main.c                       |  2 +-
 drivers/scsi/libiscsi.c                            |  2 +-
 drivers/scsi/lpfc/lpfc_init.c                      |  4 ++--
 drivers/scsi/megaraid/megaraid_sas_base.c          |  4 ++--
 drivers/scsi/megaraid/megaraid_sas_fusion.c        |  4 ++--
 drivers/scsi/mpt3sas/mpt3sas_base.c                |  4 ++--
 drivers/scsi/ncr53c8xx.c                           |  2 +-
 drivers/scsi/sym53c8xx_2/sym_hipd.h                |  2 +-
 drivers/scsi/vmw_pvscsi.c                          |  5 ++---
 drivers/sh/maple/maple.c                           |  2 +-
 drivers/staging/rdma/ehca/ehca_mrmw.c              |  4 ++--
 drivers/staging/rdma/hfi1/dma.c                    |  2 +-
 drivers/staging/rdma/ipath/ipath_dma.c             |  2 +-
 drivers/usb/core/devices.c                         |  4 ++--
 drivers/video/fbdev/vermilion/vermilion.c          |  2 +-
 drivers/xen/swiotlb-xen.c                          |  4 ++--
 fs/ceph/mds_client.c                               |  2 +-
 fs/ecryptfs/crypto.c                               |  2 +-
 fs/hfs/mdb.c                                       |  2 +-
 fs/jbd2/journal.c                                  |  4 ++--
 fs/nilfs2/ioctl.c                                  |  2 +-
 fs/proc/vmcore.c                                   |  2 +-
 include/linux/gfp.h                                |  4 ++--
 kernel/trace/ftrace.c                              |  4 ++--
 kernel/trace/trace_events.c                        |  8 ++++----
 lib/percpu_ida.c                                   |  2 +-
 lib/raid6/algos.c                                  |  2 +-
 lib/swiotlb.c                                      | 21 +++++++++------------
 mm/memory.c                                        |  2 +-
 mm/page_alloc.c                                    |  8 ++++----
 mm/slob.c                                          |  2 +-
 mm/slub.c                                          |  3 +--
 mm/sparse.c                                        |  2 +-
 net/core/neighbour.c                               |  2 +-
 net/dccp/proto.c                                   |  8 ++++----
 net/ipv4/fib_semantics.c                           |  2 +-
 net/netfilter/nf_conntrack_core.c                  |  3 +--
 net/netlink/af_netlink.c                           |  2 +-
 net/packet/af_packet.c                             |  3 +--
 net/sched/sch_api.c                                |  2 +-
 net/sctp/protocol.c                                |  8 ++++----
 net/sctp/ssnmap.c                                  |  4 ++--
 net/xfrm/xfrm_hash.c                               |  2 +-
 security/integrity/ima/ima_crypto.c                |  2 +-
 sound/core/memalloc.c                              |  2 +-
 sound/oss/dmabuf.c                                 |  2 +-
 sound/usb/usx2y/usb_stream.c                       |  4 ++--
 183 files changed, 310 insertions(+), 333 deletions(-)

diff --git a/arch/alpha/include/asm/agp.h b/arch/alpha/include/asm/agp.h
index a94d48b..2fe5800 100644
--- a/arch/alpha/include/asm/agp.h
+++ b/arch/alpha/include/asm/agp.h
@@ -13,6 +13,6 @@
 #define alloc_gatt_pages(order)		\
 	((char *)__get_free_pages(GFP_KERNEL, (order)))
 #define free_gatt_pages(table, order)	\
-	free_pages((unsigned long)(table), (order))
+	free_pages((table), (order))
 
 #endif
diff --git a/arch/alpha/kernel/pci-noop.c b/arch/alpha/kernel/pci-noop.c
index 2b1f4a1..d3bcb88 100644
--- a/arch/alpha/kernel/pci-noop.c
+++ b/arch/alpha/kernel/pci-noop.c
@@ -127,7 +127,7 @@ static void alpha_noop_free_coherent(struct device *dev, size_t size,
 				     void *cpu_addr, dma_addr_t dma_addr,
 				     struct dma_attrs *attrs)
 {
-	free_pages((unsigned long)cpu_addr, get_order(size));
+	free_pages(cpu_addr, get_order(size));
 }
 
 static dma_addr_t alpha_noop_map_page(struct device *dev, struct page *page,
diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c
index 8969bf2..fb0b20ee 100644
--- a/arch/alpha/kernel/pci_iommu.c
+++ b/arch/alpha/kernel/pci_iommu.c
@@ -455,7 +455,7 @@ try_again:
 
 	*dma_addrp = pci_map_single_1(pdev, cpu_addr, size, 0);
 	if (*dma_addrp == 0) {
-		free_pages((unsigned long)cpu_addr, order);
+		free_pages(cpu_addr, order);
 		if (alpha_mv.mv_pci_tbi || (gfp & GFP_DMA))
 			return NULL;
 		/* The address doesn't fit required mask and we
@@ -482,7 +482,7 @@ static void alpha_pci_free_coherent(struct device *dev, size_t size,
 {
 	struct pci_dev *pdev = alpha_gendev_to_pci(dev);
 	pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL);
-	free_pages((unsigned long)cpu_addr, get_order(size));
+	free_pages(cpu_addr, get_order(size));
 
 	DBGA2("pci_free_consistent: [%llx,%zx] from %pf\n",
 	      dma_addr, size, __builtin_return_address(0));
diff --git a/arch/arc/include/asm/pgalloc.h b/arch/arc/include/asm/pgalloc.h
index 86ed671..1200117 100644
--- a/arch/arc/include/asm/pgalloc.h
+++ b/arch/arc/include/asm/pgalloc.h
@@ -73,7 +73,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 
 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-	free_pages((unsigned long)pgd, __get_order_pgd());
+	free_pages(pgd, __get_order_pgd());
 }
 
 
@@ -122,13 +122,13 @@ pte_alloc_one(struct mm_struct *mm, unsigned long address)
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_pages((unsigned long)pte, __get_order_pte()); /* takes phy addr */
+	free_pages(pte, __get_order_pte()); /* takes phy addr */
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t ptep)
 {
 	pgtable_page_dtor(virt_to_page(ptep));
-	free_pages((unsigned long)ptep, __get_order_pte());
+	free_pages(ptep, __get_order_pte());
 }
 
 #define __pte_free_tlb(tlb, pte, addr)  pte_free((tlb)->mm, pte)
diff --git a/arch/arm/include/asm/tlb.h b/arch/arm/include/asm/tlb.h
index 3cadb72..c8611f2 100644
--- a/arch/arm/include/asm/tlb.h
+++ b/arch/arm/include/asm/tlb.h
@@ -174,7 +174,7 @@ tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
 	check_pgt_cache();
 
 	if (tlb->pages != tlb->local)
-		free_pages((unsigned long)tlb->pages, 0);
+		free_pages(tlb->pages, 0);
 }
 
 /*
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
index 5de6c6b..190e9fb 100644
--- a/arch/arm/kvm/mmu.c
+++ b/arch/arm/kvm/mmu.c
@@ -402,7 +402,7 @@ void free_boot_hyp_pgd(void)
 	if (boot_hyp_pgd) {
 		unmap_range(NULL, boot_hyp_pgd, hyp_idmap_start, PAGE_SIZE);
 		unmap_range(NULL, boot_hyp_pgd, TRAMPOLINE_VA, PAGE_SIZE);
-		free_pages((unsigned long)boot_hyp_pgd, hyp_pgd_order);
+		free_pages(boot_hyp_pgd, hyp_pgd_order);
 		boot_hyp_pgd = NULL;
 	}
 
@@ -436,7 +436,7 @@ void free_hyp_pgds(void)
 		for (addr = VMALLOC_START; is_vmalloc_addr((void*)addr); addr += PGDIR_SIZE)
 			unmap_range(NULL, hyp_pgd, KERN_TO_HYP(addr), PGDIR_SIZE);
 
-		free_pages((unsigned long)hyp_pgd, hyp_pgd_order);
+		free_pages(hyp_pgd, hyp_pgd_order);
 		hyp_pgd = NULL;
 	}
 	if (merged_hyp_pgd) {
diff --git a/arch/arm/mm/pgd.c b/arch/arm/mm/pgd.c
index e683db1..b8799fa 100644
--- a/arch/arm/mm/pgd.c
+++ b/arch/arm/mm/pgd.c
@@ -24,7 +24,7 @@
 #define __pgd_free(pgd)	kfree(pgd)
 #else
 #define __pgd_alloc()	(pgd_t *)__get_free_pages(GFP_KERNEL | __GFP_REPEAT, 2)
-#define __pgd_free(pgd)	free_pages((unsigned long)pgd, 2)
+#define __pgd_free(pgd)	free_pages(pgd, 2)
 #endif
 
 /*
diff --git a/arch/blackfin/include/asm/mmu_context.h b/arch/blackfin/include/asm/mmu_context.h
index 15b16d3..198cb70 100644
--- a/arch/blackfin/include/asm/mmu_context.h
+++ b/arch/blackfin/include/asm/mmu_context.h
@@ -203,7 +203,7 @@ static inline void destroy_context(struct mm_struct *mm)
 #ifdef CONFIG_MPU
 	if (current_rwx_mask[cpu] == mm->context.page_rwx_mask)
 		current_rwx_mask[cpu] = NULL;
-	free_pages((unsigned long)mm->context.page_rwx_mask, page_mask_order);
+	free_pages(mm->context.page_rwx_mask, page_mask_order);
 #endif
 }
 
diff --git a/arch/cris/arch-v32/drivers/pci/dma.c b/arch/cris/arch-v32/drivers/pci/dma.c
index ee55578..9b43cec 100644
--- a/arch/cris/arch-v32/drivers/pci/dma.c
+++ b/arch/cris/arch-v32/drivers/pci/dma.c
@@ -45,6 +45,6 @@ void dma_free_coherent(struct device *dev, size_t size,
 	int order = get_order(size);
 
 	if (!dma_release_from_coherent(dev, order, vaddr))
-		free_pages((unsigned long)vaddr, order);
+		free_pages(vaddr, order);
 }
 
diff --git a/arch/frv/mm/dma-alloc.c b/arch/frv/mm/dma-alloc.c
index 7a73aae..c4c19ff 100644
--- a/arch/frv/mm/dma-alloc.c
+++ b/arch/frv/mm/dma-alloc.c
@@ -101,7 +101,7 @@ void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle)
 	/* allocate some common virtual space to map the new pages */
 	area = get_vm_area(size, VM_ALLOC);
 	if (area == 0) {
-		free_pages(page, order);
+		free_pages((void *)page, order);
 		return NULL;
 	}
 	va = VMALLOC_VMADDR(area->addr);
diff --git a/arch/h8300/kernel/dma.c b/arch/h8300/kernel/dma.c
index eeb13d3..063a0f5 100644
--- a/arch/h8300/kernel/dma.c
+++ b/arch/h8300/kernel/dma.c
@@ -35,7 +35,7 @@ static void dma_free(struct device *dev, size_t size,
 		     struct dma_attrs *attrs)
 
 {
-	free_pages((unsigned long)vaddr, get_order(size));
+	free_pages(vaddr, get_order(size));
 }
 
 static dma_addr_t map_page(struct device *dev, struct page *page,
diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c
index a6d6190..2988500 100644
--- a/arch/ia64/hp/common/sba_iommu.c
+++ b/arch/ia64/hp/common/sba_iommu.c
@@ -1194,7 +1194,7 @@ static void sba_free_coherent(struct device *dev, size_t size, void *vaddr,
 			      dma_addr_t dma_handle, struct dma_attrs *attrs)
 {
 	sba_unmap_single_attrs(dev, dma_handle, size, 0, NULL);
-	free_pages((unsigned long) vaddr, get_order(size));
+	free_pages(vaddr, get_order(size));
 }
 
 
diff --git a/arch/ia64/include/asm/agp.h b/arch/ia64/include/asm/agp.h
index 01d09c40..80c30d4 100644
--- a/arch/ia64/include/asm/agp.h
+++ b/arch/ia64/include/asm/agp.h
@@ -21,6 +21,6 @@
 #define alloc_gatt_pages(order)		\
 	((char *)__get_free_pages(GFP_KERNEL, (order)))
 #define free_gatt_pages(table, order)	\
-	free_pages((unsigned long)(table), (order))
+	free_pages((table), (order))
 
 #endif /* _ASM_IA64_AGP_H */
diff --git a/arch/ia64/include/asm/thread_info.h b/arch/ia64/include/asm/thread_info.h
index aa995b6..53c52e9 100644
--- a/arch/ia64/include/asm/thread_info.h
+++ b/arch/ia64/include/asm/thread_info.h
@@ -81,7 +81,7 @@ struct thread_info {
 										\
 	ret;									\
 })
-#define free_task_struct(tsk)	free_pages((unsigned long) (tsk), KERNEL_STACK_SIZE_ORDER)
+#define free_task_struct(tsk)	free_pages((tsk), KERNEL_STACK_SIZE_ORDER)
 
 #endif /* !__ASSEMBLY */
 
diff --git a/arch/ia64/include/asm/tlb.h b/arch/ia64/include/asm/tlb.h
index 39d64e0d..52ab3a9 100644
--- a/arch/ia64/include/asm/tlb.h
+++ b/arch/ia64/include/asm/tlb.h
@@ -197,7 +197,7 @@ tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
 	check_pgt_cache();
 
 	if (tlb->pages != tlb->local)
-		free_pages((unsigned long)tlb->pages, 0);
+		free_pages(tlb->pages, 0);
 }
 
 /*
diff --git a/arch/ia64/kernel/uncached.c b/arch/ia64/kernel/uncached.c
index f3976da..9b90526 100644
--- a/arch/ia64/kernel/uncached.c
+++ b/arch/ia64/kernel/uncached.c
@@ -166,7 +166,7 @@ failed:
 	for (i = 0; i < (IA64_GRANULE_SIZE / PAGE_SIZE); i++)
 		ClearPageUncached(&page[i]);
 
-	free_pages(c_addr, IA64_GRANULE_SHIFT-PAGE_SHIFT);
+	free_pages((void *)c_addr, IA64_GRANULE_SHIFT-PAGE_SHIFT);
 	mutex_unlock(&uc_pool->add_chunk_mutex);
 	return -1;
 }
diff --git a/arch/ia64/sn/pci/pci_dma.c b/arch/ia64/sn/pci/pci_dma.c
index 8f59907..f25c898 100644
--- a/arch/ia64/sn/pci/pci_dma.c
+++ b/arch/ia64/sn/pci/pci_dma.c
@@ -120,7 +120,7 @@ static void *sn_dma_alloc_coherent(struct device *dev, size_t size,
 						   SN_DMA_ADDR_PHYS);
 	if (!*dma_handle) {
 		printk(KERN_ERR "%s: out of ATEs\n", __func__);
-		free_pages((unsigned long)cpuaddr, get_order(size));
+		free_pages(cpuaddr, get_order(size));
 		return NULL;
 	}
 
@@ -146,7 +146,7 @@ static void sn_dma_free_coherent(struct device *dev, size_t size, void *cpu_addr
 	BUG_ON(!dev_is_pci(dev));
 
 	provider->dma_unmap(pdev, dma_handle, 0);
-	free_pages((unsigned long)cpu_addr, get_order(size));
+	free_pages(cpu_addr, get_order(size));
 }
 
 /**
diff --git a/arch/ia64/sn/pci/tioca_provider.c b/arch/ia64/sn/pci/tioca_provider.c
index a70b11f..76bf4f0 100644
--- a/arch/ia64/sn/pci/tioca_provider.c
+++ b/arch/ia64/sn/pci/tioca_provider.c
@@ -154,7 +154,7 @@ tioca_gart_init(struct tioca_kernel *tioca_kern)
 	tioca_kern->ca_pcigart_pagemap =
 	    kzalloc(tioca_kern->ca_pcigart_entries / 8, GFP_KERNEL);
 	if (!tioca_kern->ca_pcigart_pagemap) {
-		free_pages((unsigned long)tioca_kern->ca_gart,
+		free_pages(tioca_kern->ca_gart,
 			   get_order(tioca_kern->ca_gart_size));
 		return -1;
 	}
diff --git a/arch/m68k/kernel/dma.c b/arch/m68k/kernel/dma.c
index 564665f..2bdf7bf 100644
--- a/arch/m68k/kernel/dma.c
+++ b/arch/m68k/kernel/dma.c
@@ -93,7 +93,7 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
 void dma_free_coherent(struct device *dev, size_t size,
 			 void *vaddr, dma_addr_t dma_handle)
 {
-	free_pages((unsigned long)vaddr, get_order(size));
+	free_pages(vaddr, get_order(size));
 }
 
 #endif /* CONFIG_MMU && !CONFIG_COLDFIRE */
diff --git a/arch/m68k/sun3/sun3dvma.c b/arch/m68k/sun3/sun3dvma.c
index b37521a..fdc4900 100644
--- a/arch/m68k/sun3/sun3dvma.c
+++ b/arch/m68k/sun3/sun3dvma.c
@@ -352,7 +352,7 @@ void *dvma_malloc_align(unsigned long len, unsigned long align)
 		return NULL;
 
 	if((baddr = (unsigned long)dvma_map_align(kaddr, len, align)) == 0) {
-		free_pages(kaddr, get_order(len));
+		free_pages((void *)kaddr, get_order(len));
 		return NULL;
 	}
 
@@ -360,7 +360,7 @@ void *dvma_malloc_align(unsigned long len, unsigned long align)
 
 	if(dvma_map_cpu(kaddr, vaddr, len) < 0) {
 		dvma_unmap((void *)baddr);
-		free_pages(kaddr, get_order(len));
+		free_pages((void *)kaddr, get_order(len));
 		return NULL;
 	}
 
diff --git a/arch/microblaze/kernel/dma.c b/arch/microblaze/kernel/dma.c
index bf4dec2..641cbcb 100644
--- a/arch/microblaze/kernel/dma.c
+++ b/arch/microblaze/kernel/dma.c
@@ -47,7 +47,7 @@ static void dma_direct_free_coherent(struct device *dev, size_t size,
 #ifdef NOT_COHERENT_CACHE
 	consistent_free(size, vaddr);
 #else
-	free_pages((unsigned long)vaddr, get_order(size));
+	free_pages(vaddr, get_order(size));
 #endif
 }
 
diff --git a/arch/microblaze/mm/consistent.c b/arch/microblaze/mm/consistent.c
index b06c3a7..a4b587a 100644
--- a/arch/microblaze/mm/consistent.c
+++ b/arch/microblaze/mm/consistent.c
@@ -110,7 +110,7 @@ void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle)
 	/* Allocate some common virtual space to map the new pages. */
 	area = get_vm_area(size, VM_ALLOC);
 	if (!area) {
-		free_pages(vaddr, order);
+		free_pages((void *)vaddr, order);
 		return NULL;
 	}
 	va = (unsigned long) area->addr;
@@ -148,7 +148,7 @@ void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle)
 	}
 
 	if (err) {
-		free_pages(vaddr, order);
+		free_pages((void *)vaddr, order);
 		return NULL;
 	}
 
diff --git a/arch/mips/include/asm/mach-generic/floppy.h b/arch/mips/include/asm/mach-generic/floppy.h
index e2561d9..7b0b508 100644
--- a/arch/mips/include/asm/mach-generic/floppy.h
+++ b/arch/mips/include/asm/mach-generic/floppy.h
@@ -124,7 +124,7 @@ static inline unsigned long fd_dma_mem_alloc(unsigned long size)
 
 static inline void fd_dma_mem_free(unsigned long addr, unsigned long size)
 {
-	free_pages(addr, get_order(size));
+	free_pages((void *)addr, get_order(size));
 }
 
 static inline unsigned long fd_drive_type(unsigned long n)
diff --git a/arch/mips/include/asm/mach-jazz/floppy.h b/arch/mips/include/asm/mach-jazz/floppy.h
index 4b86c88a..4aaf35b 100644
--- a/arch/mips/include/asm/mach-jazz/floppy.h
+++ b/arch/mips/include/asm/mach-jazz/floppy.h
@@ -117,7 +117,7 @@ static inline unsigned long fd_dma_mem_alloc(unsigned long size)
 static inline void fd_dma_mem_free(unsigned long addr, unsigned long size)
 {
 	vdma_free(vdma_phys2log(CPHYSADDR(addr)));
-	free_pages(addr, get_order(size));
+	free_pages((void *)addr, get_order(size));
 }
 
 static inline unsigned long fd_drive_type(unsigned long n)
diff --git a/arch/mips/include/asm/pgalloc.h b/arch/mips/include/asm/pgalloc.h
index b336037..e29cc40 100644
--- a/arch/mips/include/asm/pgalloc.h
+++ b/arch/mips/include/asm/pgalloc.h
@@ -61,7 +61,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 
 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-	free_pages((unsigned long)pgd, PGD_ORDER);
+	free_pages(pgd, PGD_ORDER);
 }
 
 static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
@@ -92,7 +92,7 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm,
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_pages((unsigned long)pte, PTE_ORDER);
+	free_pages(pte, PTE_ORDER);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
@@ -121,7 +121,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
 
 static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
 {
-	free_pages((unsigned long)pmd, PMD_ORDER);
+	free_pages(pmd, PMD_ORDER);
 }
 
 #define __pmd_free_tlb(tlb, x, addr)	pmd_free((tlb)->mm, x)
diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c
index 730d394..d3c1cec 100644
--- a/arch/mips/mm/dma-default.c
+++ b/arch/mips/mm/dma-default.c
@@ -171,7 +171,7 @@ static void mips_dma_free_noncoherent(struct device *dev, size_t size,
 		void *vaddr, dma_addr_t dma_handle)
 {
 	plat_unmap_dma_mem(dev, dma_handle, size, DMA_BIDIRECTIONAL);
-	free_pages((unsigned long) vaddr, get_order(size));
+	free_pages(vaddr, get_order(size));
 }
 
 static void mips_dma_free_coherent(struct device *dev, size_t size, void *vaddr,
diff --git a/arch/mn10300/mm/dma-alloc.c b/arch/mn10300/mm/dma-alloc.c
index e244ebe..5f3132a4 100644
--- a/arch/mn10300/mm/dma-alloc.c
+++ b/arch/mn10300/mm/dma-alloc.c
@@ -71,6 +71,6 @@ void dma_free_coherent(struct device *dev, size_t size, void *vaddr,
 	if (addr >= 0x9c000000)
 		return;
 
-	free_pages(addr, get_order(size));
+	free_pages((void *)addr, get_order(size));
 }
 EXPORT_SYMBOL(dma_free_coherent);
diff --git a/arch/nios2/include/asm/pgalloc.h b/arch/nios2/include/asm/pgalloc.h
index 6e2985e..91cd323 100644
--- a/arch/nios2/include/asm/pgalloc.h
+++ b/arch/nios2/include/asm/pgalloc.h
@@ -34,7 +34,7 @@ extern pgd_t *pgd_alloc(struct mm_struct *mm);
 
 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-	free_pages((unsigned long)pgd, PGD_ORDER);
+	free_pages(pgd, PGD_ORDER);
 }
 
 static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
@@ -66,7 +66,7 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_pages((unsigned long)pte, PTE_ORDER);
+	free_pages(pte, PTE_ORDER);
 }
 
 static inline void pte_free(struct mm_struct *mm, struct page *pte)
diff --git a/arch/nios2/mm/dma-mapping.c b/arch/nios2/mm/dma-mapping.c
index ac5da75..fa242ab 100644
--- a/arch/nios2/mm/dma-mapping.c
+++ b/arch/nios2/mm/dma-mapping.c
@@ -52,7 +52,7 @@ void dma_free_coherent(struct device *dev, size_t size, void *vaddr,
 {
 	unsigned long addr = (unsigned long) CAC_ADDR((unsigned long) vaddr);
 
-	free_pages(addr, get_order(size));
+	free_pages((void *)addr, get_order(size));
 }
 EXPORT_SYMBOL(dma_free_coherent);
 
diff --git a/arch/parisc/include/asm/agp.h b/arch/parisc/include/asm/agp.h
index d226ffa..31f67a5 100644
--- a/arch/parisc/include/asm/agp.h
+++ b/arch/parisc/include/asm/agp.h
@@ -15,6 +15,6 @@
 #define alloc_gatt_pages(order)		\
 	((char *)__get_free_pages(GFP_KERNEL, (order)))
 #define free_gatt_pages(table, order)	\
-	free_pages((unsigned long)(table), (order))
+	free_pages((table), (order))
 
 #endif /* _ASM_PARISC_AGP_H */
diff --git a/arch/parisc/include/asm/floppy.h b/arch/parisc/include/asm/floppy.h
index f84ff12..ce08762 100644
--- a/arch/parisc/include/asm/floppy.h
+++ b/arch/parisc/include/asm/floppy.h
@@ -182,7 +182,7 @@ static void _fd_dma_mem_free(unsigned long addr, unsigned long size)
 	if((unsigned int) addr >= (unsigned int) high_memory)
 		return vfree((void *)addr);
 	else
-		free_pages(addr, get_order(size));		
+		free_pages((void *)addr, get_order(size));		
 }
 
 #define fd_dma_mem_free(addr, size)  _fd_dma_mem_free(addr, size) 
diff --git a/arch/parisc/include/asm/pgalloc.h b/arch/parisc/include/asm/pgalloc.h
index daca63d..51cb827 100644
--- a/arch/parisc/include/asm/pgalloc.h
+++ b/arch/parisc/include/asm/pgalloc.h
@@ -48,7 +48,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 #if CONFIG_PGTABLE_LEVELS == 3
 	pgd -= PTRS_PER_PGD;
 #endif
-	free_pages((unsigned long)pgd, PGD_ALLOC_ORDER);
+	free_pages(pgd, PGD_ALLOC_ORDER);
 }
 
 #if CONFIG_PGTABLE_LEVELS == 3
@@ -82,7 +82,7 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
 		mm_inc_nr_pmds(mm);
 		return;
 	}
-	free_pages((unsigned long)pmd, PMD_ORDER);
+	free_pages(pmd, PMD_ORDER);
 }
 
 #else
diff --git a/arch/parisc/kernel/pci-dma.c b/arch/parisc/kernel/pci-dma.c
index b9402c9..3c4ebba 100644
--- a/arch/parisc/kernel/pci-dma.c
+++ b/arch/parisc/kernel/pci-dma.c
@@ -447,7 +447,7 @@ static void pa11_dma_free_consistent (struct device *dev, size_t size, void *vad
 	size = 1 << (order + PAGE_SHIFT);
 	unmap_uncached_pages((unsigned long)vaddr, size);
 	pcxl_free_range((unsigned long)vaddr, size);
-	free_pages((unsigned long)__va(dma_handle), order);
+	free_pages(__va(dma_handle), order);
 }
 
 static dma_addr_t pa11_dma_map_single(struct device *dev, void *addr, size_t size, enum dma_data_direction direction)
@@ -581,7 +581,7 @@ static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size,
 static void pa11_dma_free_noncoherent(struct device *dev, size_t size,
 					void *vaddr, dma_addr_t iova)
 {
-	free_pages((unsigned long)vaddr, get_order(size));
+	free_pages(vaddr, get_order(size));
 	return;
 }
 
diff --git a/arch/powerpc/include/asm/agp.h b/arch/powerpc/include/asm/agp.h
index 416e12c..06df165 100644
--- a/arch/powerpc/include/asm/agp.h
+++ b/arch/powerpc/include/asm/agp.h
@@ -12,7 +12,7 @@
 #define alloc_gatt_pages(order)		\
 	((char *)__get_free_pages(GFP_KERNEL, (order)))
 #define free_gatt_pages(table, order)	\
-	free_pages((unsigned long)(table), (order))
+	free_pages((table), (order))
 
 #endif /* __KERNEL__ */
 #endif	/* _ASM_POWERPC_AGP_H */
diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c
index 3f1472a..600fffc 100644
--- a/arch/powerpc/kernel/dma.c
+++ b/arch/powerpc/kernel/dma.c
@@ -126,7 +126,7 @@ void __dma_direct_free_coherent(struct device *dev, size_t size,
 #ifdef CONFIG_NOT_COHERENT_CACHE
 	__dma_free_coherent(size, vaddr);
 #else
-	free_pages((unsigned long)vaddr, get_order(size));
+	free_pages(vaddr, get_order(size));
 #endif
 }
 
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index a8e3490..9fde7c9 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -739,7 +739,7 @@ void iommu_free_table(struct iommu_table *tbl, const char *node_name)
 
 	/* free bitmap */
 	order = get_order(bitmap_sz);
-	free_pages((unsigned long) tbl->it_map, order);
+	free_pages(tbl->it_map, order);
 
 	/* free table */
 	kfree(tbl);
@@ -847,7 +847,7 @@ void *iommu_alloc_coherent(struct device *dev, struct iommu_table *tbl,
 	mapping = iommu_alloc(dev, tbl, ret, nio_pages, DMA_BIDIRECTIONAL,
 			      mask >> tbl->it_page_shift, io_order, NULL);
 	if (mapping == DMA_ERROR_CODE) {
-		free_pages((unsigned long)ret, order);
+		free_pages(ret, order);
 		return NULL;
 	}
 	*dma_handle = mapping;
@@ -864,7 +864,7 @@ void iommu_free_coherent(struct iommu_table *tbl, size_t size,
 		nio_pages = size >> tbl->it_page_shift;
 		iommu_free(tbl, dma_handle, nio_pages);
 		size = PAGE_ALIGN(size);
-		free_pages((unsigned long)vaddr, get_order(size));
+		free_pages(vaddr, get_order(size));
 	}
 }
 
diff --git a/arch/powerpc/kvm/book3s_64_mmu_hv.c b/arch/powerpc/kvm/book3s_64_mmu_hv.c
index fb37290..e398fdc 100644
--- a/arch/powerpc/kvm/book3s_64_mmu_hv.c
+++ b/arch/powerpc/kvm/book3s_64_mmu_hv.c
@@ -108,7 +108,7 @@ long kvmppc_alloc_hpt(struct kvm *kvm, u32 *htab_orderp)
 	if (kvm->arch.hpt_cma_alloc)
 		kvm_release_hpt(page, 1 << (order - PAGE_SHIFT));
 	else
-		free_pages(hpt, order - PAGE_SHIFT);
+		free_pages((void *)hpt, order - PAGE_SHIFT);
 	return -ENOMEM;
 }
 
@@ -156,7 +156,7 @@ void kvmppc_free_hpt(struct kvm *kvm)
 		kvm_release_hpt(virt_to_page(kvm->arch.hpt_virt),
 				1 << (kvm->arch.hpt_order - PAGE_SHIFT));
 	else
-		free_pages(kvm->arch.hpt_virt,
+		free_pages((void *)kvm->arch.hpt_virt,
 			   kvm->arch.hpt_order - PAGE_SHIFT);
 }
 
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index fd587517..949a078 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -2158,6 +2158,6 @@ int __init kvmppc_booke_init(void)
 
 void __exit kvmppc_booke_exit(void)
 {
-	free_pages(kvmppc_booke_handlers, VCPU_SIZE_ORDER);
+	free_pages((void *)kvmppc_booke_handlers, VCPU_SIZE_ORDER);
 	kvm_exit();
 }
diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
index d747dd7..c709351 100644
--- a/arch/powerpc/mm/init_64.c
+++ b/arch/powerpc/mm/init_64.c
@@ -397,8 +397,7 @@ void __ref vmemmap_free(unsigned long start, unsigned long end)
 						free_reserved_page(page++);
 				}
 			} else
-				free_pages((unsigned long)(__va(addr)),
-							get_order(page_size));
+				free_pages(__va(addr), get_order(page_size));
 
 			vmemmap_remove_mapping(start, page_size);
 		}
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
index 7692d1b..89bfc17 100644
--- a/arch/powerpc/mm/pgtable_32.c
+++ b/arch/powerpc/mm/pgtable_32.c
@@ -100,7 +100,7 @@ void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 #ifndef CONFIG_PPC_4K_PAGES
 	kmem_cache_free(pgtable_cache, (void *)pgd);
 #else
-	free_pages((unsigned long)pgd, PGDIR_ORDER - PAGE_SHIFT);
+	free_pages(pgd, PGDIR_ORDER - PAGE_SHIFT);
 #endif
 }
 
diff --git a/arch/powerpc/platforms/cell/spufs/inode.c b/arch/powerpc/platforms/cell/spufs/inode.c
index 11634fa..14a47f9 100644
--- a/arch/powerpc/platforms/cell/spufs/inode.c
+++ b/arch/powerpc/platforms/cell/spufs/inode.c
@@ -648,7 +648,7 @@ spufs_parse_options(struct super_block *sb, char *options, struct inode *root)
 
 static void spufs_exit_isolated_loader(void)
 {
-	free_pages((unsigned long) isolated_loader,
+	free_pages(isolated_loader,
 			get_order(isolated_loader_size));
 }
 
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 414fd1a..0b6f831 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -2323,7 +2323,7 @@ static void pnv_pci_ioda2_table_do_free_pages(__be64 *addr,
 		}
 	}
 
-	free_pages(addr_ul, get_order(size << 3));
+	free_pages((void *)addr_ul, get_order(size << 3));
 }
 
 static void pnv_pci_ioda2_table_free_pages(struct iommu_table *tbl)
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index 5606fe3..001b93c 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -546,7 +546,7 @@ static void * ps3_alloc_coherent(struct device *_dev, size_t size,
 	return (void*)virt_addr;
 
 clean_alloc:
-	free_pages(virt_addr, get_order(size));
+	free_pages((void *)virt_addr, get_order(size));
 clean_none:
 	dma_handle = NULL;
 	return NULL;
@@ -558,7 +558,7 @@ static void ps3_free_coherent(struct device *_dev, size_t size, void *vaddr,
 	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
 
 	ps3_dma_unmap(dev->d_region, dma_handle, size);
-	free_pages((unsigned long)vaddr, get_order(size));
+	free_pages(vaddr, get_order(size));
 }
 
 /* Creates TCEs for a user provided buffer.  The user buffer must be
diff --git a/arch/s390/hypfs/hypfs_diag.c b/arch/s390/hypfs/hypfs_diag.c
index 0450357..08f71f8 100644
--- a/arch/s390/hypfs/hypfs_diag.c
+++ b/arch/s390/hypfs/hypfs_diag.c
@@ -373,7 +373,7 @@ static void diag204_free_buffer(void)
 		vfree(diag204_buf_vmalloc);
 		diag204_buf_vmalloc = NULL;
 	} else {
-		free_pages((unsigned long) diag204_buf, 0);
+		free_pages(diag204_buf, 0);
 	}
 	diag204_buf = NULL;
 }
diff --git a/arch/s390/include/asm/idals.h b/arch/s390/include/asm/idals.h
index a7b2d75..56b1baf 100644
--- a/arch/s390/include/asm/idals.h
+++ b/arch/s390/include/asm/idals.h
@@ -139,8 +139,7 @@ idal_buffer_alloc(size_t size, int page_order)
 		// Not enough memory
 		while (i >= nr_chunks) {
 			i -= nr_chunks;
-			free_pages((unsigned long) ib->data[i],
-				   ib->page_order);
+			free_pages(ib->data[i], ib->page_order);
 		}
 		kfree(ib);
 		return ERR_PTR(-ENOMEM);
@@ -159,7 +158,7 @@ idal_buffer_free(struct idal_buffer *ib)
 	nr_ptrs = (ib->size + IDA_BLOCK_SIZE - 1) >> IDA_SIZE_LOG;
 	nr_chunks = (4096 << ib->page_order) >> IDA_SIZE_LOG;
 	for (i = 0; i < nr_ptrs; i += nr_chunks)
-		free_pages((unsigned long) ib->data[i], ib->page_order);
+		free_pages(ib->data[i], ib->page_order);
 	kfree(ib);
 }
 
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 216c8f5..63c1c8c 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -211,8 +211,8 @@ static int pcpu_alloc_lowcore(struct pcpu *pcpu, int cpu)
 out:
 	if (pcpu != &pcpu_devices[0]) {
 		free_page((void *)panic_stack);
-		free_pages(async_stack, ASYNC_ORDER);
-		free_pages((unsigned long) pcpu->lowcore, LC_ORDER);
+		free_pages((void *)async_stack, ASYNC_ORDER);
+		free_pages(pcpu->lowcore, LC_ORDER);
 	}
 	return -ENOMEM;
 }
@@ -227,8 +227,8 @@ static void pcpu_free_lowcore(struct pcpu *pcpu)
 	if (pcpu == &pcpu_devices[0])
 		return;
 	free_page((void *)(pcpu->lowcore->panic_stack-PANIC_FRAME_OFFSET));
-	free_pages(pcpu->lowcore->async_stack-ASYNC_FRAME_OFFSET, ASYNC_ORDER);
-	free_pages((unsigned long) pcpu->lowcore, LC_ORDER);
+	free_pages((void *)pcpu->lowcore->async_stack-ASYNC_FRAME_OFFSET, ASYNC_ORDER);
+	free_pages(pcpu->lowcore, LC_ORDER);
 }
 
 #endif /* CONFIG_HOTPLUG_CPU */
diff --git a/arch/s390/kernel/suspend.c b/arch/s390/kernel/suspend.c
index 8c23212..c40bdca 100644
--- a/arch/s390/kernel/suspend.c
+++ b/arch/s390/kernel/suspend.c
@@ -169,7 +169,7 @@ static int suspend_pm_cb(struct notifier_block *nb, unsigned long action,
 		break;
 	case PM_POST_SUSPEND:
 	case PM_POST_HIBERNATION:
-		free_pages(suspend_zero_pages, LC_ORDER);
+		free_pages((void *)suspend_zero_pages, LC_ORDER);
 		break;
 	default:
 		return NOTIFY_DONE;
diff --git a/arch/s390/kernel/vdso.c b/arch/s390/kernel/vdso.c
index 2391d83..2518d55 100644
--- a/arch/s390/kernel/vdso.c
+++ b/arch/s390/kernel/vdso.c
@@ -134,7 +134,7 @@ int vdso_alloc_per_cpu(struct _lowcore *lowcore)
 out:
 	free_page((void *)page_frame);
 	free_page((void *)page_table);
-	free_pages(segment_table, SEGMENT_ORDER);
+	free_pages((void *)segment_table, SEGMENT_ORDER);
 	return -ENOMEM;
 }
 
@@ -154,7 +154,7 @@ void vdso_free_per_cpu(struct _lowcore *lowcore)
 
 	free_page((void *)page_frame);
 	free_page((void *)page_table);
-	free_pages(segment_table, SEGMENT_ORDER);
+	free_pages((void *)segment_table, SEGMENT_ORDER);
 }
 
 static void vdso_init_cr5(void)
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c
index 676989b..df429c6 100644
--- a/arch/s390/mm/pgtable.c
+++ b/arch/s390/mm/pgtable.c
@@ -35,7 +35,7 @@ unsigned long *crst_table_alloc(struct mm_struct *mm)
 
 void crst_table_free(struct mm_struct *mm, unsigned long *table)
 {
-	free_pages((unsigned long) table, 2);
+	free_pages(table, 2);
 }
 
 static void __crst_table_upgrade(void *arg)
@@ -1051,7 +1051,7 @@ static void __tlb_remove_table(void *_table)
 
 	switch (mask) {
 	case 0:		/* pmd or pud */
-		free_pages((unsigned long) table, 2);
+		free_pages(table, 2);
 		break;
 	case 1:		/* lower 2K of a 4K page table */
 	case 2:		/* higher 2K of a 4K page table */
diff --git a/arch/s390/pci/pci_clp.c b/arch/s390/pci/pci_clp.c
index d6e411e..5914a16 100644
--- a/arch/s390/pci/pci_clp.c
+++ b/arch/s390/pci/pci_clp.c
@@ -53,7 +53,7 @@ static void *clp_alloc_block(gfp_t gfp_mask)
 
 static void clp_free_block(void *ptr)
 {
-	free_pages((unsigned long) ptr, get_order(CLP_BLK_SIZE));
+	free_pages(ptr, get_order(CLP_BLK_SIZE));
 }
 
 static void clp_store_query_pci_fngrp(struct zpci_dev *zdev,
diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c
index d348f2c..5a15471 100644
--- a/arch/s390/pci/pci_dma.c
+++ b/arch/s390/pci/pci_dma.c
@@ -369,7 +369,7 @@ static void *s390_dma_alloc(struct device *dev, size_t size,
 	map = s390_dma_map_pages(dev, page, pa % PAGE_SIZE,
 				 size, DMA_BIDIRECTIONAL, NULL);
 	if (dma_mapping_error(dev, map)) {
-		free_pages(pa, get_order(size));
+		free_pages((void *)pa, get_order(size));
 		return NULL;
 	}
 
@@ -388,7 +388,7 @@ static void s390_dma_free(struct device *dev, size_t size,
 	size = PAGE_ALIGN(size);
 	atomic64_sub(size / PAGE_SIZE, &zdev->allocated_pages);
 	s390_dma_unmap_pages(dev, dma_handle, size, DMA_BIDIRECTIONAL, NULL);
-	free_pages((unsigned long) pa, get_order(size));
+	free_pages(pa, get_order(size));
 }
 
 static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
diff --git a/arch/score/include/asm/pgalloc.h b/arch/score/include/asm/pgalloc.h
index 2e06765..55fb080 100644
--- a/arch/score/include/asm/pgalloc.h
+++ b/arch/score/include/asm/pgalloc.h
@@ -34,7 +34,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 
 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
-	free_pages((unsigned long)pgd, PGD_ORDER);
+	free_pages(pgd, PGD_ORDER);
 }
 
 static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
@@ -66,7 +66,7 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm,
 
 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
-	free_pages((unsigned long)pte, PTE_ORDER);
+	free_pages(pte, PTE_ORDER);
 }
 
 static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c
index b81d9db..4721e24 100644
--- a/arch/sh/mm/consistent.c
+++ b/arch/sh/mm/consistent.c
@@ -53,7 +53,7 @@ void *dma_generic_alloc_coherent(struct device *dev, size_t size,
 
 	ret_nocache = (void __force *)ioremap_nocache(virt_to_phys(ret), size);
 	if (!ret_nocache) {
-		free_pages((unsigned long)ret, order);
+		free_pages(ret, order);
 		return NULL;
 	}
 
diff --git a/arch/sparc/include/asm/agp.h b/arch/sparc/include/asm/agp.h
index 70f52c1..363d3e6 100644
--- a/arch/sparc/include/asm/agp.h
+++ b/arch/sparc/include/asm/agp.h
@@ -11,6 +11,6 @@
 #define alloc_gatt_pages(order)		\
 	((char *)__get_free_pages(GFP_KERNEL, (order)))
 #define free_gatt_pages(table, order)	\
-	free_pages((unsigned long)(table), (order))
+	free_pages((table), (order))
 
 #endif
diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c
index 7db91e1..eae7b6b 100644
--- a/arch/sparc/kernel/iommu.c
+++ b/arch/sparc/kernel/iommu.c
@@ -223,7 +223,7 @@ static void *dma_4u_alloc_coherent(struct device *dev, size_t size,
 	iopte = alloc_npages(dev, iommu, size >> IO_PAGE_SHIFT);
 
 	if (unlikely(iopte == NULL)) {
-		free_pages(first_page, order);
+		free_pages((void *)first_page, order);
 		return NULL;
 	}
 
@@ -257,7 +257,7 @@ static void dma_4u_free_coherent(struct device *dev, size_t size,
 
 	order = get_order(size);
 	if (order < 10)
-		free_pages((unsigned long)cpu, order);
+		free_pages(cpu, order);
 }
 
 static dma_addr_t dma_4u_map_page(struct device *dev, struct page *page,
diff --git a/arch/sparc/kernel/ioport.c b/arch/sparc/kernel/ioport.c
index 28fed53..39b406a 100644
--- a/arch/sparc/kernel/ioport.c
+++ b/arch/sparc/kernel/ioport.c
@@ -309,7 +309,7 @@ err_noiommu:
 err_nova:
 	kfree(res);
 err_nomem:
-	free_pages(va, order);
+	free_pages((void *)va, order);
 err_nopages:
 	return NULL;
 }
@@ -468,7 +468,7 @@ static void *pci32_alloc_coherent(struct device *dev, size_t len,
 err_nova:
 	kfree(res);
 err_nomem:
-	free_pages((unsigned long)va, order);
+	free_pages(va, order);
 err_nopages:
 	return NULL;
 }
@@ -509,7 +509,7 @@ static void pci32_free_coherent(struct device *dev, size_t n, void *p,
 
 	release_resource(res);
 	kfree(res);
-	free_pages((unsigned long)phys_to_virt(ba), get_order(n));
+	free_pages(phys_to_virt(ba), get_order(n));
 }
 
 /*
diff --git a/arch/sparc/kernel/ldc.c b/arch/sparc/kernel/ldc.c
index 59d5038..1cba9b7 100644
--- a/arch/sparc/kernel/ldc.c
+++ b/arch/sparc/kernel/ldc.c
@@ -1000,7 +1000,7 @@ static void free_queue(unsigned long num_entries, struct ldc_packet *q)
 	size = num_entries * LDC_PACKET_SIZE;
 	order = get_order(size);
 
-	free_pages((unsigned long)q, order);
+	free_pages(q, order);
 }
 
 static unsigned long ldc_cookie_to_index(u64 cookie, void *arg)
@@ -1081,7 +1081,7 @@ static int ldc_iommu_init(const char *name, struct ldc_channel *lp)
 	return 0;
 
 out_free_table:
-	free_pages((unsigned long) table, order);
+	free_pages(table, order);
 	ldc_iommu->page_table = NULL;
 
 out_free_map:
@@ -1103,7 +1103,7 @@ static void ldc_iommu_release(struct ldc_channel *lp)
 	tsbsize = num_tsb_entries * sizeof(struct ldc_mtable_entry);
 	order = get_order(tsbsize);
 
-	free_pages((unsigned long) ldc_iommu->page_table, order);
+	free_pages(ldc_iommu->page_table, order);
 	ldc_iommu->page_table = NULL;
 
 	kfree(iommu->map);
diff --git a/arch/sparc/kernel/pci_fire.c b/arch/sparc/kernel/pci_fire.c
index 11a1f0d..b8ac1bb 100644
--- a/arch/sparc/kernel/pci_fire.c
+++ b/arch/sparc/kernel/pci_fire.c
@@ -265,7 +265,7 @@ static void pci_fire_msiq_free(struct pci_pbm_info *pbm)
 	order = get_order(512 * 1024);
 	pages = (unsigned long) pbm->msi_queues;
 
-	free_pages(pages, order);
+	free_pages((void *)pages, order);
 
 	pbm->msi_queues = NULL;
 }
diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c
index 836e8ce..1a678fc 100644
--- a/arch/sparc/kernel/pci_sun4v.c
+++ b/arch/sparc/kernel/pci_sun4v.c
@@ -190,7 +190,7 @@ iommu_map_fail:
 	iommu_tbl_range_free(&iommu->tbl, *dma_addrp, npages, IOMMU_ERROR_CODE);
 
 range_alloc_fail:
-	free_pages(first_page, order);
+	free_pages((void *)first_page, order);
 	return NULL;
 }
 
@@ -229,7 +229,7 @@ static void dma_4v_free_coherent(struct device *dev, size_t size, void *cpu,
 	iommu_tbl_range_free(&iommu->tbl, dvma, npages, IOMMU_ERROR_CODE);
 	order = get_order(size);
 	if (order < 10)
-		free_pages((unsigned long)cpu, order);
+		free_pages(cpu, order);
 }
 
 static dma_addr_t dma_4v_map_page(struct device *dev, struct page *page,
@@ -795,7 +795,7 @@ static int pci_sun4v_msiq_alloc(struct pci_pbm_info *pbm)
 	return 0;
 
 h_error:
-	free_pages(pages, order);
+	free_pages((void *)pages, order);
 	return -EINVAL;
 }
 
@@ -816,7 +816,7 @@ static void pci_sun4v_msiq_free(struct pci_pbm_info *pbm)
 
 	pages = (unsigned long) pbm->msi_queues;
 
-	free_pages(pages, order);
+	free_pages((void *)pages, order);
 
 	pbm->msi_queues = NULL;
 }
diff --git a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c
index 9ef669d..504f60b 100644
--- a/arch/um/drivers/net_kern.c
+++ b/arch/um/drivers/net_kern.c
@@ -888,7 +888,7 @@ void *get_output_buffer(int *len_out)
 
 void free_output_buffer(void *buffer)
 {
-	free_pages((unsigned long) buffer, 0);
+	free_pages(buffer, 0);
 }
 
 int tap_setup_common(char *str, char *type, char **dev_name, char **mac_out,
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c
index 48af59a..b77685b 100644
--- a/arch/um/kernel/process.c
+++ b/arch/um/kernel/process.c
@@ -57,7 +57,7 @@ int pid_to_processor_id(int pid)
 
 void free_stack(unsigned long stack, int order)
 {
-	free_pages(stack, order);
+	free_pages((void *)stack, order);
 }
 
 unsigned long alloc_stack(int order, int atomic)
diff --git a/arch/unicore32/mm/pgd.c b/arch/unicore32/mm/pgd.c
index 2ade20d..9485183 100644
--- a/arch/unicore32/mm/pgd.c
+++ b/arch/unicore32/mm/pgd.c
@@ -71,7 +71,7 @@ no_pte:
 	pmd_free(mm, new_pmd);
 	mm_dec_nr_pmds(mm);
 no_pmd:
-	free_pages((unsigned long)new_pgd, 0);
+	free_pages(new_pgd, 0);
 no_pgd:
 	return NULL;
 }
@@ -101,5 +101,5 @@ void free_pgd_slow(struct mm_struct *mm, pgd_t *pgd)
 	pmd_free(mm, pmd);
 	mm_dec_nr_pmds(mm);
 free:
-	free_pages((unsigned long) pgd, 0);
+	free_pages(pgd, 0);
 }
diff --git a/arch/x86/include/asm/agp.h b/arch/x86/include/asm/agp.h
index eec2a70..4f98370 100644
--- a/arch/x86/include/asm/agp.h
+++ b/arch/x86/include/asm/agp.h
@@ -26,6 +26,6 @@
 #define alloc_gatt_pages(order)		\
 	((char *)__get_free_pages(GFP_KERNEL, (order)))
 #define free_gatt_pages(table, order)	\
-	free_pages((unsigned long)(table), (order))
+	free_pages((table), (order))
 
 #endif /* _ASM_X86_AGP_H */
diff --git a/arch/x86/include/asm/floppy.h b/arch/x86/include/asm/floppy.h
index 1c7eefe..8203e1d 100644
--- a/arch/x86/include/asm/floppy.h
+++ b/arch/x86/include/asm/floppy.h
@@ -170,7 +170,7 @@ static void _fd_dma_mem_free(unsigned long addr, unsigned long size)
 	if ((unsigned long)addr >= (unsigned long)high_memory)
 		vfree((void *)addr);
 	else
-		free_pages(addr, get_order(size));
+		free_pages((void *)addr, get_order(size));
 }
 
 #define fd_dma_mem_free(addr, size)  _fd_dma_mem_free(addr, size)
diff --git a/arch/x86/include/asm/xen/page-coherent.h b/arch/x86/include/asm/xen/page-coherent.h
index acd844c..8a55a89 100644
--- a/arch/x86/include/asm/xen/page-coherent.h
+++ b/arch/x86/include/asm/xen/page-coherent.h
@@ -18,7 +18,7 @@ static inline void xen_free_coherent_pages(struct device *hwdev, size_t size,
 		void *cpu_addr, dma_addr_t dma_handle,
 		struct dma_attrs *attrs)
 {
-	free_pages((unsigned long) cpu_addr, get_order(size));
+	free_pages(cpu_addr, get_order(size));
 }
 
 static inline void xen_dma_map_page(struct device *hwdev, struct page *page,
diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c
index 0497f71..97e092d 100644
--- a/arch/x86/kernel/pci-calgary_64.c
+++ b/arch/x86/kernel/pci-calgary_64.c
@@ -458,7 +458,7 @@ static void* calgary_alloc_coherent(struct device *dev, size_t size,
 	*dma_handle = mapping;
 	return ret;
 free:
-	free_pages((unsigned long)ret, get_order(size));
+	free_pages(ret, get_order(size));
 	ret = NULL;
 error:
 	return ret;
@@ -475,7 +475,7 @@ static void calgary_free_coherent(struct device *dev, size_t size,
 	npages = size >> PAGE_SHIFT;
 
 	iommu_free(tbl, dma_handle, npages);
-	free_pages((unsigned long)vaddr, get_order(size));
+	free_pages(vaddr, get_order(size));
 }
 
 static struct dma_map_ops calgary_dma_ops = {
@@ -815,7 +815,7 @@ static void __init calgary_free_bus(struct pci_dev *dev)
 	readq(target); /* flush */
 
 	bitmapsz = tbl->it_size / BITS_PER_BYTE;
-	free_pages((unsigned long)tbl->it_map, get_order(bitmapsz));
+	free_pages(tbl->it_map, get_order(bitmapsz));
 	tbl->it_map = NULL;
 
 	kfree(tbl);
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c
index 6ba014c..2418156 100644
--- a/arch/x86/kernel/pci-dma.c
+++ b/arch/x86/kernel/pci-dma.c
@@ -126,7 +126,7 @@ void dma_generic_free_coherent(struct device *dev, size_t size, void *vaddr,
 	struct page *page = virt_to_page(vaddr);
 
 	if (!dma_release_from_contiguous(dev, page, count))
-		free_pages((unsigned long)vaddr, get_order(size));
+		free_pages(vaddr, get_order(size));
 }
 
 bool arch_dma_alloc_attrs(struct device **dev, gfp_t *gfp)
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index f70ed2f..7206fee 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -3300,7 +3300,7 @@ static struct vmcs *alloc_vmcs(void)
 
 static void free_vmcs(struct vmcs *vmcs)
 {
-	free_pages((unsigned long)vmcs, vmcs_config.order);
+	free_pages(vmcs, vmcs_config.order);
 }
 
 /*
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index ec081fe..53c86b6 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -727,7 +727,7 @@ static void __meminit free_pagetable(struct page *page, int order)
 			while (nr_pages--)
 				free_reserved_page(page++);
 	} else
-		free_pages((unsigned long)page_address(page), order);
+		free_pages(page_address(page), order);
 }
 
 static void __meminit free_pte_table(pte_t *pte_start, pmd_t *pmd)
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
index ad28540..ed873dd 100644
--- a/arch/x86/platform/efi/efi.c
+++ b/arch/x86/platform/efi/efi.c
@@ -700,7 +700,7 @@ static void *realloc_pages(void *old_memmap, int old_shift)
 	memcpy(ret, old_memmap, PAGE_SIZE << old_shift);
 
 out:
-	free_pages((unsigned long)old_memmap, old_shift);
+	free_pages(old_memmap, old_shift);
 	return ret;
 }
 
@@ -979,7 +979,7 @@ static void __init __efi_enter_virtual_mode(void)
 	 *
 	 * efi_cleanup_page_tables(__pa(new_memmap), 1 << pg_shift);
 	 */
-	free_pages((unsigned long)new_memmap, pg_shift);
+	free_pages(new_memmap, pg_shift);
 
 	/* clean DUMMY object */
 	efi_delete_dummy_variable();
diff --git a/arch/x86/um/ldt.c b/arch/x86/um/ldt.c
index 42522ff..52e173d 100644
--- a/arch/x86/um/ldt.c
+++ b/arch/x86/um/ldt.c
@@ -291,7 +291,7 @@ static void ldt_get_host_info(void)
 	host_ldt_entries[k] = -1;
 
 out_free:
-	free_pages((unsigned long)ldt, order);
+	free_pages(ldt, order);
 }
 
 long init_new_ldt(struct mm_context *new_mm, struct mm_context *from_mm)
diff --git a/arch/x86/xen/pmu.c b/arch/x86/xen/pmu.c
index 724a087..77d8e3d 100644
--- a/arch/x86/xen/pmu.c
+++ b/arch/x86/xen/pmu.c
@@ -549,7 +549,7 @@ void xen_pmu_init(int cpu)
 fail:
 	pr_warn_once("Could not initialize VPMU for cpu %d, error %d\n",
 		cpu, err);
-	free_pages((unsigned long)xenpmu_data, 0);
+	free_pages(xenpmu_data, 0);
 }
 
 void xen_pmu_finish(int cpu)
@@ -565,6 +565,6 @@ void xen_pmu_finish(int cpu)
 
 	(void)HYPERVISOR_xenpmu_op(XENPMU_finish, &xp);
 
-	free_pages((unsigned long)per_cpu(xenpmu_shared, cpu).xenpmu_data, 0);
+	free_pages(per_cpu(xenpmu_shared, cpu).xenpmu_data, 0);
 	per_cpu(xenpmu_shared, cpu).xenpmu_data = NULL;
 }
diff --git a/arch/xtensa/kernel/pci-dma.c b/arch/xtensa/kernel/pci-dma.c
index cd66698..0b8ef59 100644
--- a/arch/xtensa/kernel/pci-dma.c
+++ b/arch/xtensa/kernel/pci-dma.c
@@ -179,7 +179,7 @@ static void xtensa_dma_free(struct device *hwdev, size_t size, void *vaddr,
 	BUG_ON(addr < XCHAL_KSEG_CACHED_VADDR ||
 	       addr > XCHAL_KSEG_CACHED_VADDR + XCHAL_KSEG_SIZE - 1);
 
-	free_pages(addr, get_order(size));
+	free_pages((void *)addr, get_order(size));
 }
 
 static dma_addr_t xtensa_map_page(struct device *dev, struct page *page,
diff --git a/crypto/xor.c b/crypto/xor.c
index 35d6b3a..20060f8 100644
--- a/crypto/xor.c
+++ b/crypto/xor.c
@@ -154,7 +154,7 @@ calibrate_xor_blocks(void)
 #undef xor_speed
 
  out:
-	free_pages((unsigned long)b1, 2);
+	free_pages(b1, 2);
 
 	active_template = fastest;
 	return 0;
diff --git a/drivers/base/devres.c b/drivers/base/devres.c
index 8fc654f..854f7ae 100644
--- a/drivers/base/devres.c
+++ b/drivers/base/devres.c
@@ -927,7 +927,7 @@ static void devm_pages_release(struct device *dev, void *res)
 {
 	struct pages_devres *devres = res;
 
-	free_pages(devres->addr, devres->order);
+	free_pages((void *)devres->addr, devres->order);
 }
 
 /**
@@ -957,7 +957,7 @@ unsigned long devm_get_free_pages(struct device *dev,
 	devres = devres_alloc(devm_pages_release,
 			      sizeof(struct pages_devres), GFP_KERNEL);
 	if (unlikely(!devres)) {
-		free_pages(addr, order);
+		free_pages((void *)addr, order);
 		return 0;
 	}
 
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index 331363e..e2738be 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -267,7 +267,7 @@ static int set_next_request(void);
 /* Dma Memory related stuff */
 
 #ifndef fd_dma_mem_free
-#define fd_dma_mem_free(addr, size) free_pages(addr, get_order(size))
+#define fd_dma_mem_free(addr, size) free_pages((void *)addr, get_order(size))
 #endif
 
 #ifndef fd_dma_mem_alloc
diff --git a/drivers/block/ps3vram.c b/drivers/block/ps3vram.c
index 56847fc..db7ece5 100644
--- a/drivers/block/ps3vram.c
+++ b/drivers/block/ps3vram.c
@@ -802,7 +802,7 @@ out_free_memory:
 out_close_gpu:
 	ps3_close_hv_device(dev);
 out_free_xdr_buf:
-	free_pages((unsigned long) priv->xdr_buf, get_order(XDR_BUF_SIZE));
+	free_pages(priv->xdr_buf, get_order(XDR_BUF_SIZE));
 fail_free_priv:
 	kfree(priv);
 	ps3_system_bus_set_drvdata(dev, NULL);
@@ -827,7 +827,7 @@ static int ps3vram_remove(struct ps3_system_bus_device *dev)
 	lv1_gpu_context_free(priv->context_handle);
 	lv1_gpu_memory_free(priv->memory_handle);
 	ps3_close_hv_device(dev);
-	free_pages((unsigned long) priv->xdr_buf, get_order(XDR_BUF_SIZE));
+	free_pages(priv->xdr_buf, get_order(XDR_BUF_SIZE));
 	kfree(priv);
 	ps3_system_bus_set_drvdata(dev, NULL);
 	return 0;
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 2fee2ee..19b8697 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -1174,7 +1174,7 @@ free_shadow:
 			info->ring_ref[i] = GRANT_INVALID_REF;
 		}
 	}
-	free_pages((unsigned long)info->ring.sring, get_order(info->nr_ring_pages * PAGE_SIZE));
+	free_pages(info->ring.sring, get_order(info->nr_ring_pages * PAGE_SIZE));
 	info->ring.sring = NULL;
 
 	if (info->irq)
@@ -1429,7 +1429,7 @@ static int setup_blkring(struct xenbus_device *dev,
 
 	err = xenbus_grant_ring(dev, info->ring.sring, info->nr_ring_pages, gref);
 	if (err < 0) {
-		free_pages((unsigned long)sring, get_order(ring_size));
+		free_pages(sring, get_order(ring_size));
 		info->ring.sring = NULL;
 		goto fail;
 	}
diff --git a/drivers/block/zram/zcomp.c b/drivers/block/zram/zcomp.c
index 5cb13ca..efaa135 100644
--- a/drivers/block/zram/zcomp.c
+++ b/drivers/block/zram/zcomp.c
@@ -66,7 +66,7 @@ static void zcomp_strm_free(struct zcomp *comp, struct zcomp_strm *zstrm)
 {
 	if (zstrm->private)
 		comp->backend->destroy(zstrm->private);
-	free_pages((unsigned long)zstrm->buffer, 1);
+	free_pages(zstrm->buffer, 1);
 	kfree(zstrm);
 }
 
diff --git a/drivers/char/agp/hp-agp.c b/drivers/char/agp/hp-agp.c
index 3695773..9f83f13 100644
--- a/drivers/char/agp/hp-agp.c
+++ b/drivers/char/agp/hp-agp.c
@@ -321,7 +321,7 @@ hp_zx1_free_gatt_table (struct agp_bridge_data *bridge)
 	struct _hp_private *hp = &hp_private;
 
 	if (hp->io_pdir_owner)
-		free_pages((unsigned long) hp->io_pdir,
+		free_pages(hp->io_pdir,
 			    get_order(hp->io_pdir_size));
 	else
 		hp->gatt[0] = HP_ZX1_SBA_IOMMU_COOKIE;
diff --git a/drivers/char/agp/uninorth-agp.c b/drivers/char/agp/uninorth-agp.c
index 0575544..bcbe6a5 100644
--- a/drivers/char/agp/uninorth-agp.c
+++ b/drivers/char/agp/uninorth-agp.c
@@ -439,7 +439,7 @@ static int uninorth_create_gatt_table(struct agp_bridge_data *bridge)
 enomem:
 	kfree(uninorth_priv.pages_arr);
 	if (table)
-		free_pages((unsigned long)table, page_order);
+		free_pages(table, page_order);
 	return -ENOMEM;
 }
 
@@ -466,7 +466,7 @@ static int uninorth_free_gatt_table(struct agp_bridge_data *bridge)
 	for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
 		ClearPageReserved(page);
 
-	free_pages((unsigned long) bridge->gatt_table_real, page_order);
+	free_pages(bridge->gatt_table_real, page_order);
 
 	return 0;
 }
diff --git a/drivers/char/mbcs.c b/drivers/char/mbcs.c
index e5d3e3f..b9d9619 100644
--- a/drivers/char/mbcs.c
+++ b/drivers/char/mbcs.c
@@ -419,7 +419,7 @@ static ssize_t mbcs_sram_read(struct file * fp, char __user *buf, size_t len, lo
 		rv = -EFAULT;
 
       exit:
-	free_pages(hostAddr, get_order(len));
+	free_pages((void *)hostAddr, get_order(len));
 
 	return rv;
 }
@@ -444,7 +444,7 @@ mbcs_sram_write(struct file * fp, const char __user *buf, size_t len, loff_t * o
 	rv = do_mbcs_sram_dmaread(soft, hostAddr, len, off);
 
       exit:
-	free_pages(hostAddr, get_order(len));
+	free_pages((void *)hostAddr, get_order(len));
 
 	return rv;
 }
diff --git a/drivers/crypto/omap-aes.c b/drivers/crypto/omap-aes.c
index eba2314..cd41ce7 100644
--- a/drivers/crypto/omap-aes.c
+++ b/drivers/crypto/omap-aes.c
@@ -701,8 +701,8 @@ static void omap_aes_done_task(unsigned long data)
 
 		len = ALIGN(dd->total_save, AES_BLOCK_SIZE);
 		pages = get_order(len);
-		free_pages((unsigned long)buf_in, pages);
-		free_pages((unsigned long)buf_out, pages);
+		free_pages(buf_in, pages);
+		free_pages(buf_out, pages);
 	}
 
 	omap_aes_finish_req(dd, 0);
diff --git a/drivers/crypto/omap-des.c b/drivers/crypto/omap-des.c
index 0a70e46..462f2bc 100644
--- a/drivers/crypto/omap-des.c
+++ b/drivers/crypto/omap-des.c
@@ -680,8 +680,8 @@ static void omap_des_done_task(unsigned long data)
 		sg_copy_buf(buf_out, dd->orig_out, 0, dd->total_save, 1);
 
 		pages = get_order(dd->total_save);
-		free_pages((unsigned long)buf_in, pages);
-		free_pages((unsigned long)buf_out, pages);
+		free_pages(buf_in, pages);
+		free_pages(buf_out, pages);
 	}
 
 	omap_des_finish_req(dd, 0);
diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c
index dd3e7ba..2971d47 100644
--- a/drivers/dma/ste_dma40.c
+++ b/drivers/dma/ste_dma40.c
@@ -3434,7 +3434,7 @@ static int __init d40_lcla_allocate(struct d40_base *base)
 			ret = -ENOMEM;
 
 			for (j = 0; j < i; j++)
-				free_pages(page_list[j], base->lcla_pool.pages);
+				free_pages((void *)page_list[j], base->lcla_pool.pages);
 			goto failure;
 		}
 
@@ -3444,7 +3444,7 @@ static int __init d40_lcla_allocate(struct d40_base *base)
 	}
 
 	for (j = 0; j < i; j++)
-		free_pages(page_list[j], base->lcla_pool.pages);
+		free_pages((void *)page_list[j], base->lcla_pool.pages);
 
 	if (i < MAX_LCLA_ALLOC_ATTEMPTS) {
 		base->lcla_pool.base = (void *)page_list[i];
@@ -3710,7 +3710,7 @@ failure:
 					 DMA_TO_DEVICE);
 
 		if (!base->lcla_pool.base_unaligned && base->lcla_pool.base)
-			free_pages((unsigned long)base->lcla_pool.base,
+			free_pages(base->lcla_pool.base,
 				   base->lcla_pool.pages);
 
 		kfree(base->lcla_pool.base_unaligned);
diff --git a/drivers/firmware/dell_rbu.c b/drivers/firmware/dell_rbu.c
index 2f452f1f..7d1afaa 100644
--- a/drivers/firmware/dell_rbu.c
+++ b/drivers/firmware/dell_rbu.c
@@ -207,7 +207,7 @@ out_alloc_packet_array:
 		pr_debug("freeing unused packet below floor 0x%lx.\n",
 			(unsigned long)virt_to_phys(
 				invalid_addr_packet_array[idx-1]));
-		free_pages((unsigned long)invalid_addr_packet_array[idx-1],
+		free_pages(invalid_addr_packet_array[idx-1],
 			ordernum);
 	}
 	kfree(invalid_addr_packet_array);
@@ -349,8 +349,7 @@ static void packet_empty_list(void)
 		 * to make sure there are no stale RBU packets left in memory
 		 */
 		memset(newpacket->data, 0, rbu_data.packetsize);
-		free_pages((unsigned long) newpacket->data,
-			newpacket->ordernum);
+		free_pages(newpacket->data, newpacket->ordernum);
 		kfree(newpacket);
 	}
 	rbu_data.packet_read_count = 0;
@@ -376,7 +375,7 @@ static void img_update_free(void)
 		dma_free_coherent(NULL, rbu_data.bios_image_size,
 			rbu_data.image_update_buffer, dell_rbu_dmaaddr);
 	else
-		free_pages((unsigned long) rbu_data.image_update_buffer,
+		free_pages(rbu_data.image_update_buffer,
 			rbu_data.image_update_ordernum);
 
 	/*
@@ -442,7 +441,7 @@ static int img_update_realloc(unsigned long size)
 		(unsigned long) virt_to_phys(image_update_buffer);
 
 	if (img_buf_phys_addr > BIOS_SCAN_LIMIT) {
-		free_pages((unsigned long) image_update_buffer, ordernum);
+		free_pages(image_update_buffer, ordernum);
 		ordernum = -1;
 		image_update_buffer = dma_alloc_coherent(NULL, size,
 			&dell_rbu_dmaaddr, GFP_KERNEL);
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
index b6e28dc..8bb3671 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
@@ -381,7 +381,7 @@ static void shutdown_signal_pages(struct kfd_process *p)
 
 	list_for_each_entry_safe(page, tmp, &p->signal_event_pages,
 					event_pages) {
-		free_pages((unsigned long)page->kernel_address,
+		free_pages(page->kernel_address,
 				get_order(KFD_SIGNAL_EVENT_LIMIT * 8));
 		kfree(page);
 	}
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index c4dcab0..0b65dc5 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -210,7 +210,7 @@ error_gpadl:
 	vmbus_teardown_gpadl(newchannel, newchannel->ringbuffer_gpadlhandle);
 
 error0:
-	free_pages((unsigned long)out,
+	free_pages(out,
 		get_order(send_ringbuffer_size + recv_ringbuffer_size));
 	kfree(open_info);
 	newchannel->state = CHANNEL_OPEN_STATE;
@@ -546,7 +546,7 @@ static int vmbus_close_internal(struct vmbus_channel *channel)
 	hv_ringbuffer_cleanup(&channel->outbound);
 	hv_ringbuffer_cleanup(&channel->inbound);
 
-	free_pages((unsigned long)channel->ringbuffer_pages,
+	free_pages(channel->ringbuffer_pages,
 		get_order(channel->ringbuffer_pagecount * PAGE_SIZE));
 
 	/*
diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index 4fc2e88..99cf9e9 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -241,12 +241,12 @@ void vmbus_disconnect(void)
 	}
 
 	if (vmbus_connection.int_page) {
-		free_pages((unsigned long)vmbus_connection.int_page, 0);
+		free_pages(vmbus_connection.int_page, 0);
 		vmbus_connection.int_page = NULL;
 	}
 
-	free_pages((unsigned long)vmbus_connection.monitor_pages[0], 0);
-	free_pages((unsigned long)vmbus_connection.monitor_pages[1], 0);
+	free_pages(vmbus_connection.monitor_pages[0], 0);
+	free_pages(vmbus_connection.monitor_pages[1], 0);
 	vmbus_connection.monitor_pages[0] = NULL;
 	vmbus_connection.monitor_pages[1] = NULL;
 }
diff --git a/drivers/infiniband/hw/qib/qib_dma.c b/drivers/infiniband/hw/qib/qib_dma.c
index 59fe092..9544208 100644
--- a/drivers/infiniband/hw/qib/qib_dma.c
+++ b/drivers/infiniband/hw/qib/qib_dma.c
@@ -151,7 +151,7 @@ static void *qib_dma_alloc_coherent(struct ib_device *dev, size_t size,
 static void qib_dma_free_coherent(struct ib_device *dev, size_t size,
 				  void *cpu_addr, u64 dma_handle)
 {
-	free_pages((unsigned long) cpu_addr, get_order(size));
+	free_pages(cpu_addr, get_order(size));
 }
 
 struct ib_dma_mapping_ops qib_dma_mapping_ops = {
diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
index 013bdff..ace59ca 100644
--- a/drivers/iommu/amd_iommu_init.c
+++ b/drivers/iommu/amd_iommu_init.c
@@ -541,7 +541,7 @@ static void iommu_enable_command_buffer(struct amd_iommu *iommu)
 
 static void __init free_command_buffer(struct amd_iommu *iommu)
 {
-	free_pages((unsigned long)iommu->cmd_buf, get_order(CMD_BUFFER_SIZE));
+	free_pages(iommu->cmd_buf, get_order(CMD_BUFFER_SIZE));
 }
 
 /* allocates the memory where the IOMMU will log its events to */
@@ -573,7 +573,7 @@ static void iommu_enable_event_buffer(struct amd_iommu *iommu)
 
 static void __init free_event_buffer(struct amd_iommu *iommu)
 {
-	free_pages((unsigned long)iommu->evt_buf, get_order(EVT_BUFFER_SIZE));
+	free_pages(iommu->evt_buf, get_order(EVT_BUFFER_SIZE));
 }
 
 /* allocates the memory where the IOMMU will log its events to */
@@ -610,7 +610,7 @@ static void __init free_ppr_log(struct amd_iommu *iommu)
 	if (iommu->ppr_log == NULL)
 		return;
 
-	free_pages((unsigned long)iommu->ppr_log, get_order(PPR_LOG_SIZE));
+	free_pages(iommu->ppr_log, get_order(PPR_LOG_SIZE));
 }
 
 static void iommu_enable_gt(struct amd_iommu *iommu)
@@ -1692,20 +1692,16 @@ static struct syscore_ops amd_iommu_syscore_ops = {
 
 static void __init free_on_init_error(void)
 {
-	free_pages((unsigned long)irq_lookup_table,
-		   get_order(rlookup_table_size));
+	free_pages(irq_lookup_table, get_order(rlookup_table_size));
 
 	kmem_cache_destroy(amd_iommu_irq_cache);
 	amd_iommu_irq_cache = NULL;
 
-	free_pages((unsigned long)amd_iommu_rlookup_table,
-		   get_order(rlookup_table_size));
+	free_pages(amd_iommu_rlookup_table, get_order(rlookup_table_size));
 
-	free_pages((unsigned long)amd_iommu_alias_table,
-		   get_order(alias_table_size));
+	free_pages(amd_iommu_alias_table, get_order(alias_table_size));
 
-	free_pages((unsigned long)amd_iommu_dev_table,
-		   get_order(dev_table_size));
+	free_pages(amd_iommu_dev_table, get_order(dev_table_size));
 
 	free_iommu_all();
 
@@ -1773,8 +1769,7 @@ static bool __init check_ioapic_information(void)
 
 static void __init free_dma_resources(void)
 {
-	free_pages((unsigned long)amd_iommu_pd_alloc_bitmap,
-		   get_order(MAX_DOMAIN_ID/8));
+	free_pages(amd_iommu_pd_alloc_bitmap, get_order(MAX_DOMAIN_ID/8));
 
 	free_unity_maps();
 }
diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
index 97c41b8..828a316 100644
--- a/drivers/iommu/exynos-iommu.c
+++ b/drivers/iommu/exynos-iommu.c
@@ -702,7 +702,7 @@ static struct iommu_domain *exynos_iommu_domain_alloc(unsigned type)
 	return &domain->domain;
 
 err_counter:
-	free_pages((unsigned long)domain->pgtable, 2);
+	free_pages(domain->pgtable, 2);
 err_pgtable:
 	kfree(domain);
 	return NULL;
@@ -732,8 +732,8 @@ static void exynos_iommu_domain_free(struct iommu_domain *iommu_domain)
 			kmem_cache_free(lv2table_kmem_cache,
 				phys_to_virt(lv2table_base(domain->pgtable + i)));
 
-	free_pages((unsigned long)domain->pgtable, 2);
-	free_pages((unsigned long)domain->lv2entcnt, 1);
+	free_pages(domain->pgtable, 2);
+	free_pages(domain->lv2entcnt, 1);
 	kfree(domain);
 }
 
diff --git a/drivers/iommu/fsl_pamu.c b/drivers/iommu/fsl_pamu.c
index a34355f..3772d00 100644
--- a/drivers/iommu/fsl_pamu.c
+++ b/drivers/iommu/fsl_pamu.c
@@ -1193,7 +1193,7 @@ error:
 		iounmap(guts_regs);
 
 	if (ppaact)
-		free_pages((unsigned long)ppaact, order);
+		free_pages(ppaact, order);
 
 	ppaact = NULL;
 
diff --git a/drivers/iommu/intel-svm.c b/drivers/iommu/intel-svm.c
index c69e3f9..a911b6c 100644
--- a/drivers/iommu/intel-svm.c
+++ b/drivers/iommu/intel-svm.c
@@ -75,11 +75,11 @@ int intel_svm_free_pasid_tables(struct intel_iommu *iommu)
 		order = 0;
 
 	if (iommu->pasid_table) {
-		free_pages((unsigned long)iommu->pasid_table, order);
+		free_pages(iommu->pasid_table, order);
 		iommu->pasid_table = NULL;
 	}
 	if (iommu->pasid_state_table) {
-		free_pages((unsigned long)iommu->pasid_state_table, order);
+		free_pages(iommu->pasid_state_table, order);
 		iommu->pasid_state_table = NULL;
 	}
 	idr_destroy(&iommu->pasid_idr);
@@ -107,7 +107,7 @@ int intel_svm_enable_prq(struct intel_iommu *iommu)
 		       iommu->name);
 		ret = -EINVAL;
 	err:
-		free_pages((unsigned long)iommu->prq, PRQ_ORDER);
+		free_pages(iommu->prq, PRQ_ORDER);
 		iommu->prq = NULL;
 		return ret;
 	}
@@ -140,7 +140,7 @@ int intel_svm_finish_prq(struct intel_iommu *iommu)
 	dmar_free_hwirq(iommu->pr_irq);
 	iommu->pr_irq = 0;
 
-	free_pages((unsigned long)iommu->prq, PRQ_ORDER);
+	free_pages(iommu->prq, PRQ_ORDER);
 	iommu->prq = NULL;
 
 	return 0;
diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
index 1fae188..fb79ee2 100644
--- a/drivers/iommu/intel_irq_remapping.c
+++ b/drivers/iommu/intel_irq_remapping.c
@@ -602,7 +602,7 @@ static void intel_teardown_irq_remapping(struct intel_iommu *iommu)
 			irq_domain_remove(iommu->ir_domain);
 			iommu->ir_domain = NULL;
 		}
-		free_pages((unsigned long)iommu->ir_table->base,
+		free_pages(iommu->ir_table->base,
 			   INTR_REMAP_PAGE_ORDER);
 		kfree(iommu->ir_table->bitmap);
 		kfree(iommu->ir_table);
diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c
index b8bcc57..01afc79 100644
--- a/drivers/iommu/msm_iommu.c
+++ b/drivers/iommu/msm_iommu.c
@@ -262,7 +262,7 @@ static void msm_iommu_domain_free(struct iommu_domain *domain)
 		if ((fl_table[i] & 0x03) == FL_TYPE_TABLE)
 			free_page(__va(((fl_table[i]) & FL_BASE_MASK)));
 
-	free_pages((unsigned long)priv->pgtable, get_order(SZ_16K));
+	free_pages(priv->pgtable, get_order(SZ_16K));
 	priv->pgtable = NULL;
 
 	kfree(priv);
diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c
index 646fe85..3059674 100644
--- a/drivers/md/bcache/bset.c
+++ b/drivers/md/bcache/bset.c
@@ -292,16 +292,14 @@ void bch_btree_keys_free(struct btree_keys *b)
 	if (bset_prev_bytes(b) < PAGE_SIZE)
 		kfree(t->prev);
 	else
-		free_pages((unsigned long) t->prev,
-			   get_order(bset_prev_bytes(b)));
+		free_pages(t->prev, get_order(bset_prev_bytes(b)));
 
 	if (bset_tree_bytes(b) < PAGE_SIZE)
 		kfree(t->tree);
 	else
-		free_pages((unsigned long) t->tree,
-			   get_order(bset_tree_bytes(b)));
+		free_pages(t->tree, get_order(bset_tree_bytes(b)));
 
-	free_pages((unsigned long) t->data, b->page_order);
+	free_pages(t->data, b->page_order);
 
 	t->prev = NULL;
 	t->tree = NULL;
@@ -1220,7 +1218,7 @@ static void __btree_sort(struct btree_keys *b, struct btree_iter *iter,
 	if (used_mempool)
 		mempool_free(virt_to_page(out), state->pool);
 	else
-		free_pages((unsigned long) out, order);
+		free_pages(out, order);
 
 	bch_bset_build_written_tree(b);
 
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index 83392f8..1540114 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -751,7 +751,7 @@ void bch_btree_cache_free(struct cache_set *c)
 	if (c->verify_data)
 		list_move(&c->verify_data->list, &c->btree_cache);
 
-	free_pages((unsigned long) c->verify_ondisk, ilog2(bucket_pages(c)));
+	free_pages(c->verify_ondisk, ilog2(bucket_pages(c)));
 #endif
 
 	list_splice(&c->btree_cache_freeable,
diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c
index 29eba72..6ed9533 100644
--- a/drivers/md/bcache/journal.c
+++ b/drivers/md/bcache/journal.c
@@ -797,8 +797,8 @@ void bch_journal_meta(struct cache_set *c, struct closure *cl)
 
 void bch_journal_free(struct cache_set *c)
 {
-	free_pages((unsigned long) c->journal.w[1].data, JSET_BITS);
-	free_pages((unsigned long) c->journal.w[0].data, JSET_BITS);
+	free_pages(c->journal.w[1].data, JSET_BITS);
+	free_pages(c->journal.w[0].data, JSET_BITS);
 	free_fifo(&c->journal.pin);
 }
 
diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
index 679a093..cd04e2d 100644
--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -1329,7 +1329,7 @@ static void cache_set_free(struct closure *cl)
 		}
 
 	bch_bset_sort_state_free(&c->sort);
-	free_pages((unsigned long) c->uuids, ilog2(bucket_pages(c)));
+	free_pages(c->uuids, ilog2(bucket_pages(c)));
 
 	if (c->moving_gc_wq)
 		destroy_workqueue(c->moving_gc_wq);
@@ -1768,7 +1768,7 @@ void bch_cache_release(struct kobject *kobj)
 		ca->set->cache[ca->sb.nr_this_dev] = NULL;
 	}
 
-	free_pages((unsigned long) ca->disk_buckets, ilog2(bucket_pages(ca)));
+	free_pages(ca->disk_buckets, ilog2(bucket_pages(ca)));
 	kfree(ca->prio_buckets);
 	vfree(ca->buckets);
 
diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
index 2dd3308..10f8a45 100644
--- a/drivers/md/dm-bufio.c
+++ b/drivers/md/dm-bufio.c
@@ -419,7 +419,7 @@ static void free_buffer_data(struct dm_bufio_client *c,
 		break;
 
 	case DATA_MODE_GET_FREE_PAGES:
-		free_pages((unsigned long)data, c->pages_per_block_bits);
+		free_pages(data, c->pages_per_block_bits);
 		break;
 
 	case DATA_MODE_VMALLOC:
diff --git a/drivers/media/pci/solo6x10/solo6x10-p2m.c b/drivers/media/pci/solo6x10/solo6x10-p2m.c
index 8c84846..ef91be9 100644
--- a/drivers/media/pci/solo6x10/solo6x10-p2m.c
+++ b/drivers/media/pci/solo6x10/solo6x10-p2m.c
@@ -227,7 +227,7 @@ static int solo_p2m_test(struct solo_dev *solo_dev, int base, int size)
 
 	rd_buf = (u32 *)__get_free_pages(GFP_KERNEL, order);
 	if (rd_buf == NULL) {
-		free_pages((unsigned long)wr_buf, order);
+		free_pages(wr_buf, order);
 		return -1;
 	}
 
@@ -253,8 +253,8 @@ static int solo_p2m_test(struct solo_dev *solo_dev, int base, int size)
 	ret = 0;
 
 test_fail:
-	free_pages((unsigned long)wr_buf, order);
-	free_pages((unsigned long)rd_buf, order);
+	free_pages(wr_buf, order);
+	free_pages(rd_buf, order);
 
 	return ret;
 }
diff --git a/drivers/media/platform/davinci/dm644x_ccdc.c b/drivers/media/platform/davinci/dm644x_ccdc.c
index ffbefdf..31d4015 100644
--- a/drivers/media/platform/davinci/dm644x_ccdc.c
+++ b/drivers/media/platform/davinci/dm644x_ccdc.c
@@ -261,7 +261,7 @@ static int ccdc_update_raw_params(struct ccdc_config_params_raw *raw_params)
 	 */
 	if (raw_params->fault_pxl.fp_num != config_params->fault_pxl.fp_num) {
 		if (fpc_physaddr != NULL) {
-			free_pages((unsigned long)fpc_physaddr,
+			free_pages(fpc_physaddr,
 				   get_order
 				   (config_params->fault_pxl.fp_num *
 				   FP_NUM_BYTES));
@@ -306,7 +306,7 @@ static int ccdc_close(struct device *dev)
 	if (fpc_physaddr != NULL) {
 		fpc_virtaddr = (unsigned int *)
 		    phys_to_virt((unsigned long)fpc_physaddr);
-		free_pages((unsigned long)fpc_virtaddr,
+		free_pages(fpc_virtaddr,
 			   get_order(config_params->fault_pxl.fp_num *
 			   FP_NUM_BYTES));
 	}
diff --git a/drivers/media/platform/omap/omap_voutlib.c b/drivers/media/platform/omap/omap_voutlib.c
index 80b0d88..f8cf63a 100644
--- a/drivers/media/platform/omap/omap_voutlib.c
+++ b/drivers/media/platform/omap/omap_voutlib.c
@@ -335,7 +335,7 @@ void omap_vout_free_buffer(unsigned long virtaddr, u32 buf_size)
 		addr += PAGE_SIZE;
 		size -= PAGE_SIZE;
 	}
-	free_pages((unsigned long) virtaddr, order);
+	free_pages((void *)virtaddr, order);
 }
 
 bool omap_vout_dss_omap24xx(void)
diff --git a/drivers/misc/cxl/native.c b/drivers/misc/cxl/native.c
index f409097..4620627 100644
--- a/drivers/misc/cxl/native.c
+++ b/drivers/misc/cxl/native.c
@@ -228,7 +228,7 @@ static inline void detach_spa(struct cxl_afu *afu)
 void cxl_release_spa(struct cxl_afu *afu)
 {
 	if (afu->spa) {
-		free_pages((unsigned long) afu->spa, afu->spa_order);
+		free_pages(afu->spa, afu->spa_order);
 		afu->spa = NULL;
 	}
 }
diff --git a/drivers/misc/mic/card/mic_virtio.c b/drivers/misc/mic/card/mic_virtio.c
index e486a0c..bb364ee 100644
--- a/drivers/misc/mic/card/mic_virtio.c
+++ b/drivers/misc/mic/card/mic_virtio.c
@@ -204,7 +204,7 @@ static void mic_del_vq(struct virtqueue *vq, int n)
 	struct mic_vdev *mvdev = to_micvdev(vq->vdev);
 	struct vring *vr = (struct vring *)(vq + 1);
 
-	free_pages((unsigned long) vr->used, get_order(mvdev->used_size[n]));
+	free_pages(vr->used, get_order(mvdev->used_size[n]));
 	vring_del_virtqueue(vq);
 	mic_card_unmap(mvdev->mdev, mvdev->vr[n]);
 	mvdev->vr[n] = NULL;
diff --git a/drivers/misc/mic/host/mic_virtio.c b/drivers/misc/mic/host/mic_virtio.c
index 58b107a..3474aa2 100644
--- a/drivers/misc/mic/host/mic_virtio.c
+++ b/drivers/misc/mic/host/mic_virtio.c
@@ -663,7 +663,7 @@ int mic_virtio_add_device(struct mic_vdev *mvdev,
 		vr->info->magic = cpu_to_le32(MIC_MAGIC + mvdev->virtio_id + i);
 		vr_addr = mic_map_single(mdev, vr->va, vr_size);
 		if (mic_map_error(vr_addr)) {
-			free_pages((unsigned long)vr->va, get_order(vr_size));
+			free_pages(vr->va, get_order(vr_size));
 			ret = -ENOMEM;
 			dev_err(mic_dev(mvdev), "%s %d err %d\n",
 				__func__, __LINE__, ret);
@@ -732,8 +732,7 @@ err:
 		struct mic_vringh *mvr = &mvdev->mvr[j];
 		mic_unmap_single(mdev, le64_to_cpu(vqconfig[j].address),
 				 mvr->vring.len);
-		free_pages((unsigned long)mvr->vring.va,
-			   get_order(mvr->vring.len));
+		free_pages(mvr->vring.va, get_order(mvr->vring.len));
 	}
 	mutex_unlock(&mdev->mic_mutex);
 	return ret;
@@ -779,14 +778,12 @@ skip_hot_remove:
 
 		mic_unmap_single(mvdev->mdev, mvr->buf_da,
 				 MIC_INT_DMA_BUF_SIZE);
-		free_pages((unsigned long)mvr->buf,
-			   get_order(MIC_INT_DMA_BUF_SIZE));
+		free_pages(mvr->buf, get_order(MIC_INT_DMA_BUF_SIZE));
 		vringh_kiov_cleanup(&mvr->riov);
 		vringh_kiov_cleanup(&mvr->wiov);
 		mic_unmap_single(mdev, le64_to_cpu(vqconfig[i].address),
 				 mvr->vring.len);
-		free_pages((unsigned long)mvr->vring.va,
-			   get_order(mvr->vring.len));
+		free_pages(mvr->vring.va, get_order(mvr->vring.len));
 	}
 
 	list_for_each_safe(pos, tmp, &mdev->vdev_list) {
diff --git a/drivers/misc/mic/scif/scif_rma.h b/drivers/misc/mic/scif/scif_rma.h
index fa67222..e13ab83 100644
--- a/drivers/misc/mic/scif/scif_rma.h
+++ b/drivers/misc/mic/scif/scif_rma.h
@@ -420,7 +420,7 @@ static inline void scif_free(void *addr, size_t size)
 	if (is_vmalloc_addr(addr))
 		vfree(addr);
 	else
-		free_pages((unsigned long)addr, get_order(align));
+		free_pages(addr, get_order(align));
 }
 
 static inline void scif_get_window(struct scif_window *window, int nr_pages)
diff --git a/drivers/misc/sgi-gru/grufile.c b/drivers/misc/sgi-gru/grufile.c
index 104a05f..276a599 100644
--- a/drivers/misc/sgi-gru/grufile.c
+++ b/drivers/misc/sgi-gru/grufile.c
@@ -306,7 +306,7 @@ static int gru_init_tables(unsigned long gru_base_paddr, void *gru_base_vaddr)
 
 fail:
 	for (bid--; bid >= 0; bid--)
-		free_pages((unsigned long)gru_base[bid], order);
+		free_pages(gru_base[bid], order);
 	return -ENOMEM;
 }
 
@@ -317,7 +317,7 @@ static void gru_free_tables(void)
 			      GRU_CHIPLETS_PER_BLADE);
 
 	for (bid = 0; bid < GRU_MAX_BLADES; bid++)
-		free_pages((unsigned long)gru_base[bid], order);
+		free_pages(gru_base[bid], order);
 }
 
 static unsigned long gru_chiplet_cpu_to_mmr(int chiplet, int cpu, int *corep)
diff --git a/drivers/misc/sgi-xp/xpc_uv.c b/drivers/misc/sgi-xp/xpc_uv.c
index 340b44d..c3fce37 100644
--- a/drivers/misc/sgi-xp/xpc_uv.c
+++ b/drivers/misc/sgi-xp/xpc_uv.c
@@ -295,7 +295,7 @@ out_5:
 out_4:
 	xpc_gru_mq_watchlist_free_uv(mq);
 out_3:
-	free_pages((unsigned long)mq->address, pg_order);
+	free_pages(mq->address, pg_order);
 out_2:
 	kfree(mq->gru_mq_desc);
 out_1:
@@ -324,7 +324,7 @@ xpc_destroy_gru_mq_uv(struct xpc_gru_mq_uv *mq)
 	xpc_gru_mq_watchlist_free_uv(mq);
 
 	pg_order = mq->order - PAGE_SHIFT;
-	free_pages((unsigned long)mq->address, pg_order);
+	free_pages(mq->address, pg_order);
 
 	kfree(mq);
 }
diff --git a/drivers/mmc/host/tmio_mmc_dma.c b/drivers/mmc/host/tmio_mmc_dma.c
index e4b05db..be9c8d7 100644
--- a/drivers/mmc/host/tmio_mmc_dma.c
+++ b/drivers/mmc/host/tmio_mmc_dma.c
@@ -350,7 +350,7 @@ void tmio_mmc_release_dma(struct tmio_mmc_host *host)
 		dma_release_channel(chan);
 	}
 	if (host->bounce_buf) {
-		free_pages((unsigned long)host->bounce_buf, 0);
+		free_pages(host->bounce_buf, 0);
 		host->bounce_buf = NULL;
 	}
 }
diff --git a/drivers/net/appletalk/ltpc.c b/drivers/net/appletalk/ltpc.c
index 01e2ac5..c98dea0 100644
--- a/drivers/net/appletalk/ltpc.c
+++ b/drivers/net/appletalk/ltpc.c
@@ -1182,7 +1182,7 @@ out4:
 	if (dev->irq)
 		free_irq(dev->irq, dev);
 out3:
-	free_pages((unsigned long)ltdmabuf, get_order(1000));
+	free_pages(ltdmabuf, get_order(1000));
 out2:
 	release_region(io, 8);
 out1:
@@ -1277,7 +1277,7 @@ static void __exit ltpc_cleanup(void)
 
 	if(debug & DEBUG_VERBOSE) printk("free_pages\n");
 
-	free_pages( (unsigned long) ltdmabuf, get_order(1000));
+	free_pages(ltdmabuf, get_order(1000));
 
 	if(debug & DEBUG_VERBOSE) printk("returning from cleanup_module\n");
 }
diff --git a/drivers/net/ethernet/amd/mvme147.c b/drivers/net/ethernet/amd/mvme147.c
index 0660ac5..abda91c 100644
--- a/drivers/net/ethernet/amd/mvme147.c
+++ b/drivers/net/ethernet/amd/mvme147.c
@@ -134,7 +134,7 @@ struct net_device * __init mvme147lance_probe(int unit)
 
 	err = register_netdev(dev);
 	if (err) {
-		free_pages(lp->ram, 3);
+		free_pages((void *)lp->ram, 3);
 		free_netdev(dev);
 		return ERR_PTR(err);
 	}
@@ -193,7 +193,7 @@ void __exit cleanup_module(void)
 {
 	struct m147lance_private *lp = netdev_priv(dev_mvme147_lance);
 	unregister_netdev(dev_mvme147_lance);
-	free_pages(lp->ram, 3);
+	free_pages((void *)lp->ram, 3);
 	free_netdev(dev_mvme147_lance);
 }
 
diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_main.h b/drivers/net/ethernet/cavium/liquidio/octeon_main.h
index cbd0819..61dbccc 100644
--- a/drivers/net/ethernet/cavium/liquidio/octeon_main.h
+++ b/drivers/net/ethernet/cavium/liquidio/octeon_main.h
@@ -141,7 +141,7 @@ cnnic_alloc_aligned_dma(struct pci_dev *pci_dev,
 		    (void *)__get_free_pages(GFP_KERNEL,
 					     get_order(size));
 		if ((unsigned long)ptr & 0x07) {
-			free_pages((unsigned long)ptr, get_order(size));
+			free_pages(ptr, get_order(size));
 			ptr = NULL;
 			/* Increment the size required if the first
 			 * attempt failed.
@@ -160,7 +160,7 @@ cnnic_alloc_aligned_dma(struct pci_dev *pci_dev,
 }
 
 #define cnnic_free_aligned_dma(pci_dev, ptr, size, orig_ptr, dma_addr) \
-		free_pages(orig_ptr, get_order(size))
+		free_pages((void *)orig_ptr, get_order(size))
 
 static inline void
 sleep_cond(wait_queue_head_t *wait_queue, int *condition)
diff --git a/drivers/net/ethernet/cirrus/cs89x0.c b/drivers/net/ethernet/cirrus/cs89x0.c
index 6038304..815c596 100644
--- a/drivers/net/ethernet/cirrus/cs89x0.c
+++ b/drivers/net/ethernet/cirrus/cs89x0.c
@@ -473,7 +473,7 @@ skip_this_frame:
 static void release_dma_buff(struct net_local *lp)
 {
 	if (lp->dma_buff) {
-		free_pages((unsigned long)(lp->dma_buff),
+		free_pages(lp->dma_buff,
 			   get_order(lp->dmasize * 1024));
 		lp->dma_buff = NULL;
 	}
diff --git a/drivers/net/ethernet/sgi/ioc3-eth.c b/drivers/net/ethernet/sgi/ioc3-eth.c
index d3b1416..e314d3f 100644
--- a/drivers/net/ethernet/sgi/ioc3-eth.c
+++ b/drivers/net/ethernet/sgi/ioc3-eth.c
@@ -872,7 +872,7 @@ static void ioc3_free_rings(struct ioc3_private *ip)
 
 	if (ip->txr) {
 		ioc3_clean_tx_ring(ip);
-		free_pages((unsigned long)ip->txr, 2);
+		free_pages(ip->txr, 2);
 		ip->txr = NULL;
 	}
 
diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
index ab6051a..66ac0ffe 100644
--- a/drivers/net/ethernet/sun/niu.c
+++ b/drivers/net/ethernet/sun/niu.c
@@ -9974,7 +9974,7 @@ static void niu_phys_free_coherent(struct device *dev, size_t size,
 {
 	unsigned long order = get_order(size);
 
-	free_pages((unsigned long) cpu_addr, order);
+	free_pages(cpu_addr, order);
 }
 
 static u64 niu_phys_map_page(struct device *dev, struct page *page,
diff --git a/drivers/net/ethernet/tile/tilegx.c b/drivers/net/ethernet/tile/tilegx.c
index 0a15acc..d1a9d77 100644
--- a/drivers/net/ethernet/tile/tilegx.c
+++ b/drivers/net/ethernet/tile/tilegx.c
@@ -1262,12 +1262,10 @@ static void tile_net_init_mpipe_fail(int instance)
 
 	for_each_online_cpu(cpu) {
 		struct tile_net_info *info = &per_cpu(per_cpu_info, cpu);
-		free_pages(
-			(unsigned long)(
-				info->mpipe[instance].comps_for_echannel[0]),
+		free_pages(info->mpipe[instance].comps_for_echannel[0],
 			get_order(COMPS_SIZE));
 		info->mpipe[instance].comps_for_echannel[0] = NULL;
-		free_pages((unsigned long)(info->mpipe[instance].iqueue.idescs),
+		free_pages(info->mpipe[instance].iqueue.idescs,
 			   get_order(NOTIF_RING_SIZE));
 		info->mpipe[instance].iqueue.idescs = NULL;
 	}
diff --git a/drivers/net/irda/au1k_ir.c b/drivers/net/irda/au1k_ir.c
index 44e4f38..6095cf4 100644
--- a/drivers/net/irda/au1k_ir.c
+++ b/drivers/net/irda/au1k_ir.c
@@ -242,7 +242,7 @@ static void *dma_alloc(size_t size, dma_addr_t *dma_handle)
 static void dma_free(void *vaddr, size_t size)
 {
 	vaddr = (void *)KSEG0ADDR(vaddr);
-	free_pages((unsigned long) vaddr, get_order(size));
+	free_pages(vaddr, get_order(size));
 }
 
 
diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c
index 01f08a7..d0c1b13 100644
--- a/drivers/net/rionet.c
+++ b/drivers/net/rionet.c
@@ -626,7 +626,7 @@ static void __exit rionet_exit(void)
 				kfree(peer);
 			}
 
-			free_pages((unsigned long)nets[i].active,
+			free_pages(nets[i].active,
 				 get_order(sizeof(void *) *
 				 RIO_MAX_ROUTE_ENTRIES(rnet->mport->sys_size)));
 			nets[i].active = NULL;
diff --git a/drivers/net/wireless/b43/debugfs.c b/drivers/net/wireless/b43/debugfs.c
index 260de71..50a2316 100644
--- a/drivers/net/wireless/b43/debugfs.c
+++ b/drivers/net/wireless/b43/debugfs.c
@@ -540,7 +540,7 @@ static ssize_t b43_debugfs_read(struct file *file, char __user *userbuf,
 		memset(buf, 0, bufsize);
 		ret = dfops->read(dev, buf, bufsize);
 		if (ret <= 0) {
-			free_pages((unsigned long)buf, buforder);
+			free_pages(buf, buforder);
 			err = ret;
 			goto out_unlock;
 		}
@@ -552,7 +552,7 @@ static ssize_t b43_debugfs_read(struct file *file, char __user *userbuf,
 				      dfile->buffer,
 				      dfile->data_len);
 	if (*ppos >= dfile->data_len) {
-		free_pages((unsigned long)dfile->buffer, buforder);
+		free_pages(dfile->buffer, buforder);
 		dfile->buffer = NULL;
 		dfile->data_len = 0;
 	}
diff --git a/drivers/net/wireless/b43legacy/debugfs.c b/drivers/net/wireless/b43legacy/debugfs.c
index 947a823..e243955 100644
--- a/drivers/net/wireless/b43legacy/debugfs.c
+++ b/drivers/net/wireless/b43legacy/debugfs.c
@@ -242,7 +242,7 @@ static ssize_t b43legacy_debugfs_read(struct file *file, char __user *userbuf,
 		} else
 			ret = dfops->read(dev, buf, bufsize);
 		if (ret <= 0) {
-			free_pages((unsigned long)buf, buforder);
+			free_pages(buf, buforder);
 			err = ret;
 			goto out_unlock;
 		}
@@ -254,7 +254,7 @@ static ssize_t b43legacy_debugfs_read(struct file *file, char __user *userbuf,
 				      dfile->buffer,
 				      dfile->data_len);
 	if (*ppos >= dfile->data_len) {
-		free_pages((unsigned long)dfile->buffer, buforder);
+		free_pages(dfile->buffer, buforder);
 		dfile->buffer = NULL;
 		dfile->data_len = 0;
 	}
diff --git a/drivers/net/wireless/iwlegacy/common.h b/drivers/net/wireless/iwlegacy/common.h
index ce52cf1..555bf02 100644
--- a/drivers/net/wireless/iwlegacy/common.h
+++ b/drivers/net/wireless/iwlegacy/common.h
@@ -1504,7 +1504,7 @@ __il_free_pages(struct il_priv *il, struct page *page)
 static inline void
 il_free_pages(struct il_priv *il, unsigned long page)
 {
-	free_pages(page, il->hw_params.rx_page_order);
+	free_pages((void *)page, il->hw_params.rx_page_order);
 	il->alloc_rxb_page--;
 }
 
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h
index 6f76525..8ccbda2 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans.h
+++ b/drivers/net/wireless/iwlwifi/iwl-trans.h
@@ -342,7 +342,7 @@ struct iwl_host_cmd {
 
 static inline void iwl_free_resp(struct iwl_host_cmd *cmd)
 {
-	free_pages(cmd->_rx_page_addr, cmd->_rx_page_order);
+	free_pages((void *)cmd->_rx_page_addr, cmd->_rx_page_order);
 }
 
 struct iwl_rx_cmd_buffer {
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
index 25defe4..374adb1 100644
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -6354,7 +6354,7 @@ err_dummy_packet:
 	dev_kfree_skb(wl->dummy_packet);
 
 err_aggr:
-	free_pages((unsigned long)wl->aggr_buf, order);
+	free_pages(wl->aggr_buf, order);
 
 err_wq:
 	destroy_workqueue(wl->freezable_wq);
@@ -6386,7 +6386,7 @@ int wlcore_free_hw(struct wl1271 *wl)
 	kfree(wl->mbox);
 	free_page(wl->fwlog);
 	dev_kfree_skb(wl->dummy_packet);
-	free_pages((unsigned long)wl->aggr_buf, get_order(wl->aggr_buf_size));
+	free_pages(wl->aggr_buf, get_order(wl->aggr_buf_size));
 
 	wl1271_debugfs_exit(wl);
 
diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c
index 8e11fb2..b172617 100644
--- a/drivers/parisc/ccio-dma.c
+++ b/drivers/parisc/ccio-dma.c
@@ -871,7 +871,7 @@ ccio_free_consistent(struct device *dev, size_t size, void *cpu_addr,
 		     dma_addr_t dma_handle)
 {
 	ccio_unmap_single(dev, dma_handle, size, 0);
-	free_pages((unsigned long)cpu_addr, get_order(size));
+	free_pages(cpu_addr, get_order(size));
 }
 
 /*
diff --git a/drivers/parisc/ccio-rm-dma.c b/drivers/parisc/ccio-rm-dma.c
index f78f6f1..b9649c2 100644
--- a/drivers/parisc/ccio-rm-dma.c
+++ b/drivers/parisc/ccio-rm-dma.c
@@ -96,7 +96,7 @@ static void *ccio_alloc_consistent(struct pci_dev *dev, size_t size,
 static void ccio_free_consistent(struct pci_dev *dev, size_t size,
 			       void *vaddr, dma_addr_t handle)
 {
-	free_pages((unsigned long)vaddr, get_order(size));
+	free_pages(vaddr, get_order(size));
 }
 
 static dma_addr_t ccio_map_single(struct pci_dev *dev, void *ptr, size_t size,
diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c
index 225049b..6066d4e 100644
--- a/drivers/parisc/sba_iommu.c
+++ b/drivers/parisc/sba_iommu.c
@@ -901,7 +901,7 @@ sba_free_consistent(struct device *hwdev, size_t size, void *vaddr,
 		    dma_addr_t dma_handle)
 {
 	sba_unmap_single(hwdev, dma_handle, size, 0);
-	free_pages((unsigned long) vaddr, get_order(size));
+	free_pages(vaddr, get_order(size));
 }
 
 
@@ -1156,14 +1156,14 @@ sba_alloc_pdir(unsigned int pdir_size)
 			/* allocate a new one on 512k alignment */
 			unsigned long new_pdir = __get_free_pages(GFP_KERNEL, (19-12));
 			/* release original */
-			free_pages(pdir_base, pdir_order);
+			free_pages((void *)pdir_base, pdir_order);
 
 			pdir_base = new_pdir;
 
 			/* release excess */
 			while (pdir_order < (19-12)) {
 				new_pdir += pdir_size;
-				free_pages(new_pdir, pdir_order);
+				free_pages((void *)new_pdir, pdir_order);
 				pdir_order +=1;
 				pdir_size <<=1;
 			}
@@ -1176,10 +1176,10 @@ sba_alloc_pdir(unsigned int pdir_size)
 		unsigned long new_pdir = __get_free_pages(GFP_KERNEL, pdir_order+1); /* 2 or 4MB */
 
 		/* release original */
-		free_pages( pdir_base, pdir_order);
+		free_pages((void *)pdir_base, pdir_order);
 
 		/* release first 1MB */
-		free_pages(new_pdir, 20-12);
+		free_pages((void *)new_pdir, 20-12);
 
 		pdir_base = new_pdir + 1024*1024;
 
@@ -1194,10 +1194,10 @@ sba_alloc_pdir(unsigned int pdir_size)
 
 			new_pdir += 3*1024*1024;
 			/* release last 1MB */
-			free_pages(new_pdir, 20-12);
+			free_pages((void *)new_pdir, 20-12);
 
 			/* release unusable 128KB */
-			free_pages(new_pdir - 128*1024 , 17-12);
+			free_pages((void *)new_pdir - 128*1024 , 17-12);
 
 			pdir_size -= 128*1024;
 		}
diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c
index 3018ae5..9ad90fd 100644
--- a/drivers/pci/host/pci-tegra.c
+++ b/drivers/pci/host/pci-tegra.c
@@ -1347,7 +1347,7 @@ static int tegra_pcie_disable_msi(struct tegra_pcie *pcie)
 	afi_writel(pcie, 0, AFI_MSI_EN_VEC6);
 	afi_writel(pcie, 0, AFI_MSI_EN_VEC7);
 
-	free_pages(msi->pages, 0);
+	free_pages((void *)msi->pages, 0);
 
 	if (msi->irq > 0)
 		free_irq(msi->irq, pcie);
diff --git a/drivers/pci/host/pcie-xilinx.c b/drivers/pci/host/pcie-xilinx.c
index 3c7a0d5..a9438d2 100644
--- a/drivers/pci/host/pcie-xilinx.c
+++ b/drivers/pci/host/pcie-xilinx.c
@@ -527,7 +527,7 @@ static void xilinx_pcie_free_irq_domain(struct xilinx_pcie_port *port)
 	/* Free IRQ Domain */
 	if (IS_ENABLED(CONFIG_PCI_MSI)) {
 
-		free_pages(port->msi_pages, 0);
+		free_pages((void *)port->msi_pages, 0);
 
 		num_irqs = XILINX_NUM_MSI_IRQS;
 	} else {
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 5257c80..7b24131 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -104,7 +104,7 @@ struct dasd_device *dasd_alloc_device(void)
 	/* Get one page for error recovery. */
 	device->erp_mem = (void *) get_zeroed_page(GFP_ATOMIC | GFP_DMA);
 	if (!device->erp_mem) {
-		free_pages((unsigned long) device->ccw_mem, 1);
+		free_pages(device->ccw_mem, 1);
 		kfree(device);
 		return ERR_PTR(-ENOMEM);
 	}
@@ -137,7 +137,7 @@ void dasd_free_device(struct dasd_device *device)
 {
 	kfree(device->private);
 	free_page(device->erp_mem);
-	free_pages((unsigned long)device->ccw_mem, 1);
+	free_pages(device->ccw_mem, 1);
 	kfree(device);
 }
 
diff --git a/drivers/s390/char/hmcdrv_cache.c b/drivers/s390/char/hmcdrv_cache.c
index 4cda5ad..60a4233 100644
--- a/drivers/s390/char/hmcdrv_cache.c
+++ b/drivers/s390/char/hmcdrv_cache.c
@@ -240,7 +240,7 @@ int hmcdrv_cache_startup(size_t cachesize)
 void hmcdrv_cache_shutdown(void)
 {
 	if (hmcdrv_cache_file.content) {
-		free_pages((unsigned long) hmcdrv_cache_file.content,
+		free_pages(hmcdrv_cache_file.content,
 			   hmcdrv_cache_order);
 		hmcdrv_cache_file.content = NULL;
 	}
diff --git a/drivers/s390/char/hmcdrv_ftp.c b/drivers/s390/char/hmcdrv_ftp.c
index d8a07bb..c08e633 100644
--- a/drivers/s390/char/hmcdrv_ftp.c
+++ b/drivers/s390/char/hmcdrv_ftp.c
@@ -278,7 +278,7 @@ ssize_t hmcdrv_ftp_cmd(char __kernel *cmd, loff_t offset,
 		break;
 	}
 
-	free_pages((unsigned long) ftp.buf, order);
+	free_pages(ftp.buf, order);
 	return retlen;
 }
 
diff --git a/drivers/s390/char/tty3270.c b/drivers/s390/char/tty3270.c
index e96fc7f..bb61f97 100644
--- a/drivers/s390/char/tty3270.c
+++ b/drivers/s390/char/tty3270.c
@@ -728,7 +728,7 @@ out_write:
 	raw3270_request_free(tp->write);
 out_pages:
 	while (pages--)
-		free_pages((unsigned long) tp->freemem_pages[pages], 0);
+		free_pages(tp->freemem_pages[pages], 0);
 	kfree(tp->freemem_pages);
 	tty_port_destroy(&tp->port);
 out_tp:
@@ -750,7 +750,7 @@ tty3270_free_view(struct tty3270 *tp)
 	raw3270_request_free(tp->read);
 	raw3270_request_free(tp->write);
 	for (pages = 0; pages < TTY3270_STRING_PAGES; pages++)
-		free_pages((unsigned long) tp->freemem_pages[pages], 0);
+		free_pages(tp->freemem_pages[pages], 0);
 	kfree(tp->freemem_pages);
 	tty_port_destroy(&tp->port);
 	kfree(tp);
diff --git a/drivers/s390/char/vmcp.c b/drivers/s390/char/vmcp.c
index 0fdedad..f73bf6b 100644
--- a/drivers/s390/char/vmcp.c
+++ b/drivers/s390/char/vmcp.c
@@ -51,7 +51,7 @@ static int vmcp_release(struct inode *inode, struct file *file)
 
 	session = file->private_data;
 	file->private_data = NULL;
-	free_pages((unsigned long)session->response, get_order(session->bufsize));
+	free_pages(session->response, get_order(session->bufsize));
 	kfree(session);
 	return 0;
 }
@@ -151,8 +151,7 @@ static long vmcp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 		mutex_unlock(&session->mutex);
 		return put_user(temp, argp);
 	case VMCP_SETBUF:
-		free_pages((unsigned long)session->response,
-				get_order(session->bufsize));
+		free_pages(session->response, get_order(session->bufsize));
 		session->response=NULL;
 		temp = get_user(session->bufsize, argp);
 		if (get_order(session->bufsize) > 8) {
diff --git a/drivers/s390/cio/cmf.c b/drivers/s390/cio/cmf.c
index b2afad5..70356a3 100644
--- a/drivers/s390/cio/cmf.c
+++ b/drivers/s390/cio/cmf.c
@@ -578,7 +578,7 @@ static int alloc_cmb(struct ccw_device *cdev)
 
 		if (cmb_area.mem) {
 			/* ok, another thread was faster */
-			free_pages((unsigned long)mem, get_order(size));
+			free_pages(mem, get_order(size));
 		} else if (!mem) {
 			/* no luck */
 			ret = -ENOMEM;
@@ -622,7 +622,7 @@ static void free_cmb(struct ccw_device *cdev)
 		ssize_t size;
 		size = sizeof(struct cmb) * cmb_area.num_channels;
 		cmf_activate(NULL, 0);
-		free_pages((unsigned long)cmb_area.mem, get_order(size));
+		free_pages(cmb_area.mem, get_order(size));
 		cmb_area.mem = NULL;
 	}
 	spin_unlock_irq(cdev->ccwlock);
diff --git a/drivers/scsi/cxlflash/main.c b/drivers/scsi/cxlflash/main.c
index b91d769..d4d6e38 100644
--- a/drivers/scsi/cxlflash/main.c
+++ b/drivers/scsi/cxlflash/main.c
@@ -622,7 +622,7 @@ static void free_mem(struct cxlflash_cfg *cfg)
 				free_page(buf);
 		}
 
-		free_pages((ulong)afu, get_order(sizeof(struct afu)));
+		free_pages(afu, get_order(sizeof(struct afu)));
 		cfg->afu = NULL;
 	}
 }
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index 6bffd91..d03ab52 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -2962,7 +2962,7 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn)
 	iscsi_suspend_tx(conn);
 
 	spin_lock_bh(&session->frwd_lock);
-	free_pages((unsigned long) conn->data,
+	free_pages(conn->data,
 		   get_order(ISCSI_DEF_MAX_RECV_SEG_LEN));
 	kfree(conn->persistent_address);
 	kfree(conn->local_ipaddr);
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index db9446c..4d9457b 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -11476,14 +11476,14 @@ lpfc_exit(void)
 		printk(KERN_ERR	"9062 BLKGRD: freeing %lu pages for "
 				"_dump_buf_data at 0x%p\n",
 				(1L << _dump_buf_data_order), _dump_buf_data);
-		free_pages((unsigned long)_dump_buf_data, _dump_buf_data_order);
+		free_pages(_dump_buf_data, _dump_buf_data_order);
 	}
 
 	if (_dump_buf_dif) {
 		printk(KERN_ERR	"9049 BLKGRD: freeing %lu pages for "
 				"_dump_buf_dif at 0x%p\n",
 				(1L << _dump_buf_dif_order), _dump_buf_dif);
-		free_pages((unsigned long)_dump_buf_dif, _dump_buf_dif_order);
+		free_pages(_dump_buf_dif, _dump_buf_dif_order);
 	}
 	kfree(lpfc_used_cpu);
 	idr_destroy(&lpfc_hba_index);
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index 97a1c1c..2c81ab3 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -5939,7 +5939,7 @@ static void megasas_detach_one(struct pci_dev *pdev)
 						  fusion->ld_map[i],
 						  fusion->ld_map_phys[i]);
 			if (fusion->ld_drv_map[i])
-				free_pages((ulong)fusion->ld_drv_map[i],
+				free_pages(fusion->ld_drv_map[i],
 					fusion->drv_map_pages);
 				if (fusion->pd_seq_sync)
 					dma_free_coherent(&instance->pdev->dev,
@@ -5947,7 +5947,7 @@ static void megasas_detach_one(struct pci_dev *pdev)
 						fusion->pd_seq_sync[i],
 						fusion->pd_seq_phys[i]);
 		}
-		free_pages((ulong)instance->ctrl_context,
+		free_pages(instance->ctrl_context,
 			instance->ctrl_context_pages);
 	} else {
 		megasas_release_mfi(instance);
diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
index 8d630a5..6429914 100644
--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
@@ -1193,7 +1193,7 @@ megasas_init_adapter_fusion(struct megasas_instance *instance)
 				"memory for local map info for %d pages\n",
 				fusion->drv_map_pages);
 			if (i == 1)
-				free_pages((ulong)fusion->ld_drv_map[0],
+				free_pages(fusion->ld_drv_map[0],
 					fusion->drv_map_pages);
 			goto fail_ioc_init;
 		}
@@ -2486,7 +2486,7 @@ megasas_free_host_crash_buffer(struct megasas_instance *instance)
 ;
 	for (i = 0; i < instance->drv_buf_alloc; i++) {
 		if (instance->crash_buf[i])
-			free_pages((ulong)instance->crash_buf[i],
+			free_pages(instance->crash_buf[i],
 					instance->crash_buf_pages);
 	}
 	instance->drv_buf_index = 0;
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 11393eb..0d73ea3 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -3115,7 +3115,7 @@ _base_release_memory_pools(struct MPT3SAS_ADAPTER *ioc)
 	}
 
 	if (ioc->scsi_lookup) {
-		free_pages((ulong)ioc->scsi_lookup, ioc->scsi_lookup_pages);
+		free_pages(ioc->scsi_lookup, ioc->scsi_lookup_pages);
 		ioc->scsi_lookup = NULL;
 	}
 	kfree(ioc->hpr_lookup);
@@ -3129,7 +3129,7 @@ _base_release_memory_pools(struct MPT3SAS_ADAPTER *ioc)
 		}
 		if (ioc->chain_dma_pool)
 			pci_pool_destroy(ioc->chain_dma_pool);
-		free_pages((ulong)ioc->chain_lookup, ioc->chain_pages);
+		free_pages(ioc->chain_lookup, ioc->chain_pages);
 		ioc->chain_lookup = NULL;
 	}
 }
diff --git a/drivers/scsi/ncr53c8xx.c b/drivers/scsi/ncr53c8xx.c
index 5b93ed8..1c3f5a0 100644
--- a/drivers/scsi/ncr53c8xx.c
+++ b/drivers/scsi/ncr53c8xx.c
@@ -366,7 +366,7 @@ static m_addr_t ___mp0_getp(m_pool_s *mp)
 
 static void ___mp0_freep(m_pool_s *mp, m_addr_t m)
 {
-	free_pages(m, MEMO_PAGE_ORDER);
+	free_pages((void *)m, MEMO_PAGE_ORDER);
 	--mp->nump;
 }
 
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.h b/drivers/scsi/sym53c8xx_2/sym_hipd.h
index a141b17..45f9ac2 100644
--- a/drivers/scsi/sym53c8xx_2/sym_hipd.h
+++ b/drivers/scsi/sym53c8xx_2/sym_hipd.h
@@ -1125,7 +1125,7 @@ bad:
 #define sym_get_mem_cluster()	\
 	(void *) __get_free_pages(GFP_ATOMIC, SYM_MEM_PAGE_ORDER)
 #define sym_free_mem_cluster(p)	\
-	free_pages((unsigned long)p, SYM_MEM_PAGE_ORDER)
+	free_pages(p, SYM_MEM_PAGE_ORDER)
 
 /*
  *  Link between free memory chunks of a given size.
diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c
index 0f133c1..7921fc8 100644
--- a/drivers/scsi/vmw_pvscsi.c
+++ b/drivers/scsi/vmw_pvscsi.c
@@ -1159,7 +1159,7 @@ static void pvscsi_free_sgls(const struct pvscsi_adapter *adapter)
 	unsigned i;
 
 	for (i = 0; i < adapter->req_depth; ++i, ++ctx)
-		free_pages((unsigned long)ctx->sgl, get_order(SGL_SIZE));
+		free_pages(ctx->sgl, get_order(SGL_SIZE));
 }
 
 static int pvscsi_setup_msix(const struct pvscsi_adapter *adapter,
@@ -1257,8 +1257,7 @@ static int pvscsi_allocate_sg(struct pvscsi_adapter *adapter)
 		BUG_ON(!IS_ALIGNED(((unsigned long)ctx->sgl), PAGE_SIZE));
 		if (!ctx->sgl) {
 			for (; i >= 0; --i, --ctx) {
-				free_pages((unsigned long)ctx->sgl,
-					   get_order(SGL_SIZE));
+				free_pages(ctx->sgl, get_order(SGL_SIZE));
 				ctx->sgl = NULL;
 			}
 			return -ENOMEM;
diff --git a/drivers/sh/maple/maple.c b/drivers/sh/maple/maple.c
index bec81c2..84fa4f7 100644
--- a/drivers/sh/maple/maple.c
+++ b/drivers/sh/maple/maple.c
@@ -874,7 +874,7 @@ cleanup_irq:
 	free_irq(HW_EVENT_MAPLE_DMA, 0);
 
 cleanup_dma:
-	free_pages((unsigned long) maple_sendbuf, MAPLE_DMA_PAGES);
+	free_pages(maple_sendbuf, MAPLE_DMA_PAGES);
 
 cleanup_basic:
 	driver_unregister(&maple_unsupported_device.drv);
diff --git a/drivers/staging/rdma/ehca/ehca_mrmw.c b/drivers/staging/rdma/ehca/ehca_mrmw.c
index f914b30..8bc19ca 100644
--- a/drivers/staging/rdma/ehca/ehca_mrmw.c
+++ b/drivers/staging/rdma/ehca/ehca_mrmw.c
@@ -2560,7 +2560,7 @@ static void *ehca_dma_alloc_coherent(struct ib_device *dev, size_t size,
 		addr = page_address(p);
 		dma_addr = ehca_map_vaddr(addr);
 		if (ehca_dma_mapping_error(dev, dma_addr)) {
-			free_pages((unsigned long)addr,	get_order(size));
+			free_pages(addr,	get_order(size));
 			return NULL;
 		}
 		if (dma_handle)
@@ -2574,7 +2574,7 @@ static void ehca_dma_free_coherent(struct ib_device *dev, size_t size,
 				   void *cpu_addr, u64 dma_handle)
 {
 	if (cpu_addr && size)
-		free_pages((unsigned long)cpu_addr, get_order(size));
+		free_pages(cpu_addr, get_order(size));
 }
 
 
diff --git a/drivers/staging/rdma/hfi1/dma.c b/drivers/staging/rdma/hfi1/dma.c
index e03bd73..2ba5ce4 100644
--- a/drivers/staging/rdma/hfi1/dma.c
+++ b/drivers/staging/rdma/hfi1/dma.c
@@ -168,7 +168,7 @@ static void *hfi1_dma_alloc_coherent(struct ib_device *dev, size_t size,
 static void hfi1_dma_free_coherent(struct ib_device *dev, size_t size,
 				   void *cpu_addr, u64 dma_handle)
 {
-	free_pages((unsigned long) cpu_addr, get_order(size));
+	free_pages(cpu_addr, get_order(size));
 }
 
 struct ib_dma_mapping_ops hfi1_dma_mapping_ops = {
diff --git a/drivers/staging/rdma/ipath/ipath_dma.c b/drivers/staging/rdma/ipath/ipath_dma.c
index 123a8c0..e363f70 100644
--- a/drivers/staging/rdma/ipath/ipath_dma.c
+++ b/drivers/staging/rdma/ipath/ipath_dma.c
@@ -161,7 +161,7 @@ static void *ipath_dma_alloc_coherent(struct ib_device *dev, size_t size,
 static void ipath_dma_free_coherent(struct ib_device *dev, size_t size,
 				    void *cpu_addr, u64 dma_handle)
 {
-	free_pages((unsigned long) cpu_addr, get_order(size));
+	free_pages(cpu_addr, get_order(size));
 }
 
 struct ib_dma_mapping_ops ipath_dma_mapping_ops = {
diff --git a/drivers/usb/core/devices.c b/drivers/usb/core/devices.c
index 2a3bbdf..b741639 100644
--- a/drivers/usb/core/devices.c
+++ b/drivers/usb/core/devices.c
@@ -583,7 +583,7 @@ static ssize_t usb_device_dump(char __user **buffer, size_t *nbytes,
 		if (length > *nbytes)
 			length = *nbytes;
 		if (copy_to_user(*buffer, pages_start + *skip_bytes, length)) {
-			free_pages((unsigned long)pages_start, 1);
+			free_pages(pages_start, 1);
 			return -EFAULT;
 		}
 		*nbytes -= length;
@@ -594,7 +594,7 @@ static ssize_t usb_device_dump(char __user **buffer, size_t *nbytes,
 	} else
 		*skip_bytes -= length;
 
-	free_pages((unsigned long)pages_start, 1);
+	free_pages(pages_start, 1);
 
 	/* Now look at all of this device's children. */
 	usb_hub_for_each_child(usbdev, chix, childdev) {
diff --git a/drivers/video/fbdev/vermilion/vermilion.c b/drivers/video/fbdev/vermilion/vermilion.c
index 1c1e95a..0882f41 100644
--- a/drivers/video/fbdev/vermilion/vermilion.c
+++ b/drivers/video/fbdev/vermilion/vermilion.c
@@ -167,7 +167,7 @@ static void vmlfb_free_vram_area(struct vram_area *va)
 		printk(KERN_DEBUG MODULE_NAME
 		       ": Freeing %ld bytes vram area at 0x%08lx\n",
 		       va->size, va->phys);
-		free_pages(va->logical, va->order);
+		free_pages((void *)va->logical, va->order);
 
 		va->logical = 0;
 	}
diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index 7399782..fa6b56e 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -261,7 +261,7 @@ retry:
 		if (early)
 			free_bootmem(__pa(xen_io_tlb_start), PAGE_ALIGN(bytes));
 		else {
-			free_pages((unsigned long)xen_io_tlb_start, order);
+			free_pages(xen_io_tlb_start, order);
 			xen_io_tlb_start = NULL;
 		}
 		m_ret = XEN_SWIOTLB_EFIXUP;
@@ -288,7 +288,7 @@ error:
 	if (early)
 		panic("%s (rc:%d)", xen_swiotlb_error(m_ret), rc);
 	else
-		free_pages((unsigned long)xen_io_tlb_start, order);
+		free_pages(xen_io_tlb_start, order);
 	return rc;
 }
 void *
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index e7b130a..40c9ef6 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -339,7 +339,7 @@ static void destroy_reply_info(struct ceph_mds_reply_info_parsed *info)
 {
 	if (!info->dir_in)
 		return;
-	free_pages((unsigned long)info->dir_in, get_order(info->dir_buf_size));
+	free_pages(info->dir_in, get_order(info->dir_buf_size));
 }
 
 
diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
index 80d6901..cf53226 100644
--- a/fs/ecryptfs/crypto.c
+++ b/fs/ecryptfs/crypto.c
@@ -1233,7 +1233,7 @@ int ecryptfs_write_metadata(struct dentry *ecryptfs_dentry,
 		goto out_free;
 	}
 out_free:
-	free_pages((unsigned long)virt, order);
+	free_pages(virt, order);
 out:
 	return rc;
 }
diff --git a/fs/hfs/mdb.c b/fs/hfs/mdb.c
index aa3f0d6..92f1730 100644
--- a/fs/hfs/mdb.c
+++ b/fs/hfs/mdb.c
@@ -360,7 +360,7 @@ void hfs_mdb_put(struct super_block *sb)
 	unload_nls(HFS_SB(sb)->nls_io);
 	unload_nls(HFS_SB(sb)->nls_disk);
 
-	free_pages((unsigned long)HFS_SB(sb)->bitmap, PAGE_SIZE < 8192 ? 1 : 0);
+	free_pages(HFS_SB(sb)->bitmap, PAGE_SIZE < 8192 ? 1 : 0);
 	kfree(HFS_SB(sb));
 	sb->s_fs_info = NULL;
 }
diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
index 81e6226..450a30b 100644
--- a/fs/jbd2/journal.c
+++ b/fs/jbd2/journal.c
@@ -2322,14 +2322,14 @@ void *jbd2_alloc(size_t size, gfp_t flags)
 void jbd2_free(void *ptr, size_t size)
 {
 	if (size == PAGE_SIZE) {
-		free_pages((unsigned long)ptr, 0);
+		free_pages(ptr, 0);
 		return;
 	}
 	if (size > PAGE_SIZE) {
 		int order = get_order(size);
 
 		if (order < 3)
-			free_pages((unsigned long)ptr, order);
+			free_pages(ptr, order);
 		else
 			vfree(ptr);
 		return;
diff --git a/fs/nilfs2/ioctl.c b/fs/nilfs2/ioctl.c
index aba4381..09d2ede 100644
--- a/fs/nilfs2/ioctl.c
+++ b/fs/nilfs2/ioctl.c
@@ -122,7 +122,7 @@ static int nilfs_ioctl_wrap_copy(struct the_nilfs *nilfs,
 	}
 	argv->v_nmembs = total;
 
-	free_pages((unsigned long)buf, 0);
+	free_pages(buf, 0);
 	return ret;
 }
 
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index 4e61388..dd6566c 100644
--- a/fs/proc/vmcore.c
+++ b/fs/proc/vmcore.c
@@ -990,7 +990,7 @@ static void __init set_vmcore_list_offsets(size_t elfsz, size_t elfnotes_sz,
 
 static void free_elfcorebuf(void)
 {
-	free_pages((unsigned long)elfcorebuf, get_order(elfcorebuf_sz_orig));
+	free_pages(elfcorebuf, get_order(elfcorebuf_sz_orig));
 	elfcorebuf = NULL;
 	vfree(elfnotes_buf);
 	elfnotes_buf = NULL;
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 54c6efd..df5c0a0 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -487,7 +487,7 @@ void * __meminit alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask);
 		__get_free_pages((gfp_mask) | GFP_DMA, (order))
 
 extern void __free_pages(struct page *page, unsigned int order);
-extern void free_pages(unsigned long addr, unsigned int order);
+extern void free_pages(const void *addr, unsigned int order);
 extern void free_hot_cold_page(struct page *page, bool cold);
 extern void free_hot_cold_page_list(struct list_head *list, bool cold);
 
@@ -500,7 +500,7 @@ extern void __free_kmem_pages(struct page *page, unsigned int order);
 extern void free_kmem_pages(unsigned long addr, unsigned int order);
 
 #define __free_page(page) __free_pages((page), 0)
-#define free_page(addr) free_pages((unsigned long)(addr), 0)
+#define free_page(addr) free_pages((addr), 0)
 
 void page_alloc_init(void);
 void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp);
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 14703bb..b995e08 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2985,7 +2985,7 @@ ftrace_allocate_pages(unsigned long num_to_init)
 	pg = start_pg;
 	while (pg) {
 		order = get_count_order(pg->size / ENTRIES_PER_PAGE);
-		free_pages((unsigned long)pg->records, order);
+		free_pages(pg->records, order);
 		start_pg = pg->next;
 		kfree(pg);
 		pg = start_pg;
@@ -4931,7 +4931,7 @@ void ftrace_release_mod(struct module *mod)
 
 			*last_pg = pg->next;
 			order = get_count_order(pg->size / ENTRIES_PER_PAGE);
-			free_pages((unsigned long)pg->records, order);
+			free_pages(pg->records, order);
 			kfree(pg);
 		} else
 			last_pg = &pg->next;
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index f2e26df..5d06111 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -600,7 +600,7 @@ static void __ftrace_clear_event_pids(struct trace_array *tr)
 	/* Wait till all users are no longer using pid filtering */
 	synchronize_sched();
 
-	free_pages((unsigned long)pid_list->pids, pid_list->order);
+	free_pages(pid_list->pids, pid_list->order);
 	kfree(pid_list);
 }
 
@@ -1662,7 +1662,7 @@ ftrace_event_pid_write(struct file *filp, const char __user *ubuf,
 				break;
 			memcpy(pid_page, pid_list->pids,
 			       pid_list->nr_pids * sizeof(pid_t));
-			free_pages((unsigned long)pid_list->pids, pid_list->order);
+			free_pages(pid_list->pids, pid_list->order);
 
 			pid_list->order++;
 			pid_list->pids = pid_page;
@@ -1676,7 +1676,7 @@ ftrace_event_pid_write(struct file *filp, const char __user *ubuf,
 
 	if (ret < 0) {
 		if (pid_list)
-			free_pages((unsigned long)pid_list->pids, pid_list->order);
+			free_pages(pid_list->pids, pid_list->order);
 		kfree(pid_list);
 		mutex_unlock(&event_mutex);
 		return ret;
@@ -1717,7 +1717,7 @@ ftrace_event_pid_write(struct file *filp, const char __user *ubuf,
 	if (filtered_pids) {
 		synchronize_sched();
 
-		free_pages((unsigned long)filtered_pids->pids, filtered_pids->order);
+		free_pages(filtered_pids->pids, filtered_pids->order);
 		kfree(filtered_pids);
 	} else {
 		/*
diff --git a/lib/percpu_ida.c b/lib/percpu_ida.c
index 6d40944..d58f5a9 100644
--- a/lib/percpu_ida.c
+++ b/lib/percpu_ida.c
@@ -266,7 +266,7 @@ EXPORT_SYMBOL_GPL(percpu_ida_free);
 void percpu_ida_destroy(struct percpu_ida *pool)
 {
 	free_percpu(pool->tag_cpu);
-	free_pages((unsigned long) pool->freelist,
+	free_pages(pool->freelist,
 		   get_order(pool->nr_tags * sizeof(unsigned)));
 }
 EXPORT_SYMBOL_GPL(percpu_ida_destroy);
diff --git a/lib/raid6/algos.c b/lib/raid6/algos.c
index 975c6e0..3d8cf31 100644
--- a/lib/raid6/algos.c
+++ b/lib/raid6/algos.c
@@ -234,7 +234,7 @@ int __init raid6_select_algo(void)
 	/* select raid recover functions */
 	rec_best = raid6_choose_recov();
 
-	free_pages((unsigned long)syndromes, 1);
+	free_pages(syndromes, 1);
 
 	return gen_best && rec_best ? 0 : -EINVAL;
 }
diff --git a/lib/swiotlb.c b/lib/swiotlb.c
index 76f29ec..87e33e7 100644
--- a/lib/swiotlb.c
+++ b/lib/swiotlb.c
@@ -278,7 +278,7 @@ swiotlb_late_init_with_default_size(size_t default_size)
 	}
 	rc = swiotlb_late_init_with_tbl(vstart, io_tlb_nslabs);
 	if (rc)
-		free_pages((unsigned long)vstart, order);
+		free_pages(vstart, order);
 	return rc;
 }
 
@@ -336,12 +336,10 @@ swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs)
 	return 0;
 
 cleanup4:
-	free_pages((unsigned long)io_tlb_list, get_order(io_tlb_nslabs *
-	                                                 sizeof(int)));
+	free_pages(io_tlb_list, get_order(io_tlb_nslabs * sizeof(int)));
 	io_tlb_list = NULL;
 cleanup3:
-	free_pages((unsigned long)v_overflow_buffer,
-		   get_order(io_tlb_overflow));
+	free_pages(v_overflow_buffer, get_order(io_tlb_overflow));
 	io_tlb_overflow_buffer = 0;
 cleanup2:
 	io_tlb_end = 0;
@@ -356,13 +354,12 @@ void __init swiotlb_free(void)
 		return;
 
 	if (late_alloc) {
-		free_pages((unsigned long)phys_to_virt(io_tlb_overflow_buffer),
+		free_pages(phys_to_virt(io_tlb_overflow_buffer),
 			   get_order(io_tlb_overflow));
-		free_pages((unsigned long)io_tlb_orig_addr,
+		free_pages(io_tlb_orig_addr,
 			   get_order(io_tlb_nslabs * sizeof(phys_addr_t)));
-		free_pages((unsigned long)io_tlb_list, get_order(io_tlb_nslabs *
-								 sizeof(int)));
-		free_pages((unsigned long)phys_to_virt(io_tlb_start),
+		free_pages(io_tlb_list, get_order(io_tlb_nslabs * sizeof(int)));
+		free_pages(phys_to_virt(io_tlb_start),
 			   get_order(io_tlb_nslabs << IO_TLB_SHIFT));
 	} else {
 		memblock_free_late(io_tlb_overflow_buffer,
@@ -644,7 +641,7 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size,
 			/*
 			 * The allocated memory isn't reachable by the device.
 			 */
-			free_pages((unsigned long) ret, order);
+			free_pages(ret, order);
 			ret = NULL;
 		}
 	}
@@ -696,7 +693,7 @@ swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr,
 
 	WARN_ON(irqs_disabled());
 	if (!is_swiotlb_buffer(paddr))
-		free_pages((unsigned long)vaddr, get_order(size));
+		free_pages(vaddr, get_order(size));
 	else
 		/* DMA_TO_DEVICE to avoid memcpy in swiotlb_tbl_unmap_single */
 		swiotlb_tbl_unmap_single(hwdev, paddr, size, DMA_TO_DEVICE);
diff --git a/mm/memory.c b/mm/memory.c
index 47f8f87..8364c20 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -279,7 +279,7 @@ void tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long e
 
 	for (batch = tlb->local.next; batch; batch = next) {
 		next = batch->next;
-		free_pages((unsigned long)batch, 0);
+		free_pages(batch, 0);
 	}
 	tlb->local.next = NULL;
 }
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index e68689c..11014f3 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3292,11 +3292,11 @@ void __free_pages(struct page *page, unsigned int order)
 
 EXPORT_SYMBOL(__free_pages);
 
-void free_pages(unsigned long addr, unsigned int order)
+void free_pages(const void *addr, unsigned int order)
 {
-	if (addr != 0) {
-		VM_BUG_ON(!virt_addr_valid((void *)addr));
-		__free_pages(virt_to_page((void *)addr), order);
+	if (addr) {
+		VM_BUG_ON(!virt_addr_valid(addr));
+		__free_pages(virt_to_page(addr), order);
 	}
 }
 
diff --git a/mm/slob.c b/mm/slob.c
index 17e8f8c..d6430e8 100644
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -208,7 +208,7 @@ static void slob_free_pages(void *b, int order)
 {
 	if (current->reclaim_state)
 		current->reclaim_state->reclaimed_slab += 1 << order;
-	free_pages((unsigned long)b, order);
+	free_pages(b, order);
 }
 
 /*
diff --git a/mm/slub.c b/mm/slub.c
index b50b454..5da985fe 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -4196,8 +4196,7 @@ struct loc_track {
 static void free_loc_track(struct loc_track *t)
 {
 	if (t->max)
-		free_pages((unsigned long)t->loc,
-			get_order(sizeof(struct location) * t->max));
+		free_pages(t->loc, get_order(sizeof(struct location) * t->max));
 }
 
 static int alloc_loc_track(struct loc_track *t, unsigned long max, gfp_t flags)
diff --git a/mm/sparse.c b/mm/sparse.c
index d1b48b6..109258a 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -648,7 +648,7 @@ static void __kfree_section_memmap(struct page *memmap)
 	if (is_vmalloc_addr(memmap))
 		vfree(memmap);
 	else
-		free_pages((unsigned long)memmap,
+		free_pages(memmap,
 			   get_order(sizeof(struct page) * PAGES_PER_SECTION));
 }
 
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index f18ae91..6eb5170 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -352,7 +352,7 @@ static void neigh_hash_free_rcu(struct rcu_head *head)
 	if (size <= PAGE_SIZE)
 		kfree(buckets);
 	else
-		free_pages((unsigned long)buckets, get_order(size));
+		free_pages(buckets, get_order(size));
 	kfree(nht);
 }
 
diff --git a/net/dccp/proto.c b/net/dccp/proto.c
index 41e6580..b689ca8 100644
--- a/net/dccp/proto.c
+++ b/net/dccp/proto.c
@@ -1211,11 +1211,11 @@ out_ackvec_exit:
 out_free_dccp_mib:
 	dccp_mib_exit();
 out_free_dccp_bhash:
-	free_pages((unsigned long)dccp_hashinfo.bhash, bhash_order);
+	free_pages(dccp_hashinfo.bhash, bhash_order);
 out_free_dccp_locks:
 	inet_ehash_locks_free(&dccp_hashinfo);
 out_free_dccp_ehash:
-	free_pages((unsigned long)dccp_hashinfo.ehash, ehash_order);
+	free_pages(dccp_hashinfo.ehash, ehash_order);
 out_free_bind_bucket_cachep:
 	kmem_cache_destroy(dccp_hashinfo.bind_bucket_cachep);
 out_free_percpu:
@@ -1231,10 +1231,10 @@ static void __exit dccp_fini(void)
 {
 	ccid_cleanup_builtins();
 	dccp_mib_exit();
-	free_pages((unsigned long)dccp_hashinfo.bhash,
+	free_pages(dccp_hashinfo.bhash,
 		   get_order(dccp_hashinfo.bhash_size *
 			     sizeof(struct inet_bind_hashbucket)));
-	free_pages((unsigned long)dccp_hashinfo.ehash,
+	free_pages(dccp_hashinfo.ehash,
 		   get_order((dccp_hashinfo.ehash_mask + 1) *
 			     sizeof(struct inet_ehash_bucket)));
 	inet_ehash_locks_free(&dccp_hashinfo);
diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
index d97268e..f69b6d9 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
@@ -853,7 +853,7 @@ static void fib_info_hash_free(struct hlist_head *hash, int bytes)
 	if (bytes <= PAGE_SIZE)
 		kfree(hash);
 	else
-		free_pages((unsigned long) hash, get_order(bytes));
+		free_pages(hash, get_order(bytes));
 }
 
 static void fib_info_hash_move(struct hlist_head *new_info_hash,
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index 3cb3cb8..5a80da65 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -1444,8 +1444,7 @@ void nf_ct_free_hashtable(void *hash, unsigned int size)
 	if (is_vmalloc_addr(hash))
 		vfree(hash);
 	else
-		free_pages((unsigned long)hash,
-			   get_order(sizeof(struct hlist_head) * size));
+		free_pages(hash, get_order(sizeof(struct hlist_head) * size));
 }
 EXPORT_SYMBOL_GPL(nf_ct_free_hashtable);
 
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index 59651af..da6fba6 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -328,7 +328,7 @@ static void free_pg_vec(void **pg_vec, unsigned int order, unsigned int len)
 			if (is_vmalloc_addr(pg_vec[i]))
 				vfree(pg_vec[i]);
 			else
-				free_pages((unsigned long)pg_vec[i], order);
+				free_pages(pg_vec[i], order);
 		}
 	}
 	kfree(pg_vec);
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index 992396a..fae2812 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -4000,8 +4000,7 @@ static void free_pg_vec(struct pgv *pg_vec, unsigned int order,
 			if (is_vmalloc_addr(pg_vec[i].buffer))
 				vfree(pg_vec[i].buffer);
 			else
-				free_pages((unsigned long)pg_vec[i].buffer,
-					   order);
+				free_pages(pg_vec[i].buffer, order);
 			pg_vec[i].buffer = NULL;
 		}
 	}
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index 7ec667d..1c9ff0b 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -645,7 +645,7 @@ static void qdisc_class_hash_free(struct hlist_head *h, unsigned int n)
 	if (size <= PAGE_SIZE)
 		kfree(h);
 	else
-		free_pages((unsigned long)h, get_order(size));
+		free_pages(h, get_order(size));
 }
 
 void qdisc_class_hash_grow(struct Qdisc *sch, struct Qdisc_class_hash *clhash)
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
index 3d9ea9a..8dfdd0e 100644
--- a/net/sctp/protocol.c
+++ b/net/sctp/protocol.c
@@ -1514,13 +1514,13 @@ err_register_defaults:
 	sctp_v4_pf_exit();
 	sctp_v6_pf_exit();
 	sctp_sysctl_unregister();
-	free_pages((unsigned long)sctp_port_hashtable,
+	free_pages(sctp_port_hashtable,
 		   get_order(sctp_port_hashsize *
 			     sizeof(struct sctp_bind_hashbucket)));
 err_bhash_alloc:
 	kfree(sctp_ep_hashtable);
 err_ehash_alloc:
-	free_pages((unsigned long)sctp_assoc_hashtable,
+	free_pages(sctp_assoc_hashtable,
 		   get_order(sctp_assoc_hashsize *
 			     sizeof(struct sctp_hashbucket)));
 err_ahash_alloc:
@@ -1557,11 +1557,11 @@ static __exit void sctp_exit(void)
 
 	sctp_sysctl_unregister();
 
-	free_pages((unsigned long)sctp_assoc_hashtable,
+	free_pages(sctp_assoc_hashtable,
 		   get_order(sctp_assoc_hashsize *
 			     sizeof(struct sctp_hashbucket)));
 	kfree(sctp_ep_hashtable);
-	free_pages((unsigned long)sctp_port_hashtable,
+	free_pages(sctp_port_hashtable,
 		   get_order(sctp_port_hashsize *
 			     sizeof(struct sctp_bind_hashbucket)));
 
diff --git a/net/sctp/ssnmap.c b/net/sctp/ssnmap.c
index b9c8521..97b1939 100644
--- a/net/sctp/ssnmap.c
+++ b/net/sctp/ssnmap.c
@@ -75,7 +75,7 @@ fail_map:
 	if (size <= KMALLOC_MAX_SIZE)
 		kfree(retval);
 	else
-		free_pages((unsigned long)retval, get_order(size));
+		free_pages(retval, get_order(size));
 fail:
 	return NULL;
 }
@@ -119,7 +119,7 @@ void sctp_ssnmap_free(struct sctp_ssnmap *map)
 	if (size <= KMALLOC_MAX_SIZE)
 		kfree(map);
 	else
-		free_pages((unsigned long)map, get_order(size));
+		free_pages(map, get_order(size));
 
 	SCTP_DBG_OBJCNT_DEC(ssnmap);
 }
diff --git a/net/xfrm/xfrm_hash.c b/net/xfrm/xfrm_hash.c
index 1e98bc0..f19872e 100644
--- a/net/xfrm/xfrm_hash.c
+++ b/net/xfrm/xfrm_hash.c
@@ -35,5 +35,5 @@ void xfrm_hash_free(struct hlist_head *n, unsigned int sz)
 	else if (hashdist)
 		vfree(n);
 	else
-		free_pages((unsigned long)n, get_order(sz));
+		free_pages(n, get_order(sz));
 }
diff --git a/security/integrity/ima/ima_crypto.c b/security/integrity/ima/ima_crypto.c
index 6eb6293..96f416c 100644
--- a/security/integrity/ima/ima_crypto.c
+++ b/security/integrity/ima/ima_crypto.c
@@ -165,7 +165,7 @@ static void ima_free_pages(void *ptr, size_t size)
 {
 	if (!ptr)
 		return;
-	free_pages((unsigned long)ptr, get_order(size));
+	free_pages(ptr, get_order(size));
 }
 
 static struct crypto_ahash *ima_alloc_atfm(enum hash_algo algo)
diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c
index f05cb6a..43ac8b5 100644
--- a/sound/core/memalloc.c
+++ b/sound/core/memalloc.c
@@ -69,7 +69,7 @@ void snd_free_pages(void *ptr, size_t size)
 	if (ptr == NULL)
 		return;
 	pg = get_order(size);
-	free_pages((unsigned long) ptr, pg);
+	free_pages(ptr, pg);
 }
 
 /*
diff --git a/sound/oss/dmabuf.c b/sound/oss/dmabuf.c
index e3f2913..457755a 100644
--- a/sound/oss/dmabuf.c
+++ b/sound/oss/dmabuf.c
@@ -141,7 +141,7 @@ static void sound_free_dmap(struct dma_buffparms *dmap)
 		ClearPageReserved(page);
 
 	dma_unmap_single(NULL, dmap->raw_buf_phys, dmap->buffsize, DMA_BIDIRECTIONAL);
-	free_pages((unsigned long) dmap->raw_buf, sz);
+	free_pages(dmap->raw_buf, sz);
 	dmap->raw_buf = NULL;
 }
 
diff --git a/sound/usb/usx2y/usb_stream.c b/sound/usb/usx2y/usb_stream.c
index bf618e1..c423951 100644
--- a/sound/usb/usx2y/usb_stream.c
+++ b/sound/usb/usx2y/usb_stream.c
@@ -143,9 +143,9 @@ void usb_stream_free(struct usb_stream_kernel *sk)
 	if (!s)
 		return;
 
-	free_pages((unsigned long)sk->write_page, get_order(s->write_size));
+	free_pages(sk->write_page, get_order(s->write_size));
 	sk->write_page = NULL;
-	free_pages((unsigned long)s, get_order(s->read_size));
+	free_pages(s, get_order(s->read_size));
 	sk->s = NULL;
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 03/83] switch get_zeroed_page() to returning void *
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
  2015-12-21 23:46 ` [POC][PATCH 01/83] switch free_page() from unsigned long to const void * Al Viro
  2015-12-21 23:46 ` [POC][PATCH 02/83] switch free_pages() " Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 04/83] kill unused {get,free}_user_page() Al Viro
                   ` (80 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/arm64/kernel/vdso.c                |  2 +-
 arch/ia64/hp/sim/simserial.c            |  2 +-
 arch/nios2/mm/init.c                    |  2 +-
 arch/s390/kernel/perf_cpum_sf.c         |  2 +-
 arch/s390/kernel/vdso.c                 |  4 ++--
 arch/s390/kvm/kvm-s390.c                |  2 +-
 arch/s390/kvm/priv.c                    |  4 ++--
 arch/s390/oprofile/hwsampler.c          |  2 +-
 arch/sh/boards/mach-hp6xx/pm.c          |  2 +-
 arch/sparc/kernel/irq_64.c              |  2 +-
 arch/sparc/kernel/pci_sun4v.c           |  2 +-
 arch/um/kernel/skas/mmu.c               |  2 +-
 arch/x86/kernel/amd_gart_64.c           |  2 +-
 drivers/char/agp/efficeon-agp.c         |  2 +-
 drivers/hsi/clients/cmt_speech.c        |  2 +-
 drivers/infiniband/hw/qib/qib_qp.c      |  2 +-
 drivers/lguest/lguest_user.c            |  2 +-
 drivers/lguest/page_tables.c            |  4 ++--
 drivers/net/wireless/libertas/debugfs.c | 30 +++++++++++++++---------------
 drivers/net/wireless/mwifiex/debugfs.c  | 28 ++++++++++++++--------------
 drivers/s390/char/sclp_ftp.c            |  2 +-
 drivers/s390/cio/qdio_main.c            |  2 +-
 drivers/s390/net/qeth_core_main.c       |  2 +-
 drivers/staging/rdma/ehca/ipz_pt_fn.c   |  2 +-
 drivers/staging/rdma/hfi1/qp.c          |  2 +-
 drivers/staging/rdma/ipath/ipath_qp.c   |  2 +-
 drivers/tty/amiserial.c                 |  2 +-
 drivers/tty/cyclades.c                  |  2 +-
 drivers/tty/serial/crisv10.c            |  2 +-
 drivers/tty/serial/serial_core.c        |  2 +-
 drivers/usb/mon/mon_bin.c               |  2 +-
 drivers/xen/xenbus/xenbus_probe.c       |  2 +-
 fs/configfs/symlink.c                   |  2 +-
 fs/kernfs/symlink.c                     |  2 +-
 include/linux/gfp.h                     |  2 +-
 mm/page_alloc.c                         |  4 ++--
 net/atm/proc.c                          |  2 +-
 net/rds/cong.c                          |  2 +-
 sound/oss/vidc.c                        |  2 +-
 39 files changed, 70 insertions(+), 70 deletions(-)

diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c
index 97bc68f..07e4d14 100644
--- a/arch/arm64/kernel/vdso.c
+++ b/arch/arm64/kernel/vdso.c
@@ -64,7 +64,7 @@ static int alloc_vectors_page(void)
 	int sigret_sz = __aarch32_sigret_code_end - __aarch32_sigret_code_start;
 	unsigned long vpage;
 
-	vpage = get_zeroed_page(GFP_ATOMIC);
+	vpage = (unsigned long)get_zeroed_page(GFP_ATOMIC);
 
 	if (!vpage)
 		return -ENOMEM;
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c
index 36b3217..6e81449 100644
--- a/arch/ia64/hp/sim/simserial.c
+++ b/arch/ia64/hp/sim/simserial.c
@@ -367,7 +367,7 @@ static int activate(struct tty_port *port, struct tty_struct *tty)
 	unsigned long flags, page;
 	int retval = 0;
 
-	page = get_zeroed_page(GFP_KERNEL);
+	page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
diff --git a/arch/nios2/mm/init.c b/arch/nios2/mm/init.c
index e75c75d..e03a757 100644
--- a/arch/nios2/mm/init.c
+++ b/arch/nios2/mm/init.c
@@ -105,7 +105,7 @@ static int alloc_kuser_page(void)
 	int kuser_sz = __kuser_helper_end - __kuser_helper_start;
 	unsigned long vpage;
 
-	vpage = get_zeroed_page(GFP_ATOMIC);
+	vpage = (unsigned long)get_zeroed_page(GFP_ATOMIC);
 	if (!vpage)
 		return -ENOMEM;
 
diff --git a/arch/s390/kernel/perf_cpum_sf.c b/arch/s390/kernel/perf_cpum_sf.c
index 0dca133..9698d67 100644
--- a/arch/s390/kernel/perf_cpum_sf.c
+++ b/arch/s390/kernel/perf_cpum_sf.c
@@ -158,7 +158,7 @@ static int alloc_sample_data_block(unsigned long *sdbt, gfp_t gfp_flags)
 	unsigned long sdb, *trailer;
 
 	/* Allocate and initialize sample-data-block */
-	sdb = get_zeroed_page(gfp_flags);
+	sdb = (unsigned long)get_zeroed_page(gfp_flags);
 	if (!sdb)
 		return -ENOMEM;
 	trailer = trailer_entry_ptr(sdb);
diff --git a/arch/s390/kernel/vdso.c b/arch/s390/kernel/vdso.c
index 2518d55..d0ec7748 100644
--- a/arch/s390/kernel/vdso.c
+++ b/arch/s390/kernel/vdso.c
@@ -102,8 +102,8 @@ int vdso_alloc_per_cpu(struct _lowcore *lowcore)
 		return 0;
 
 	segment_table = __get_free_pages(GFP_KERNEL, SEGMENT_ORDER);
-	page_table = get_zeroed_page(GFP_KERNEL | GFP_DMA);
-	page_frame = get_zeroed_page(GFP_KERNEL);
+	page_table = (unsigned long)get_zeroed_page(GFP_KERNEL | GFP_DMA);
+	page_frame = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!segment_table || !page_table || !page_frame)
 		goto out;
 
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 940dd42..2b7580c 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -1396,7 +1396,7 @@ void kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu *vcpu)
 
 int kvm_s390_vcpu_setup_cmma(struct kvm_vcpu *vcpu)
 {
-	vcpu->arch.sie_block->cbrlo = get_zeroed_page(GFP_KERNEL);
+	vcpu->arch.sie_block->cbrlo = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!vcpu->arch.sie_block->cbrlo)
 		return -ENOMEM;
 
diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c
index 9ed1a25..af22195 100644
--- a/arch/s390/kvm/priv.c
+++ b/arch/s390/kvm/priv.c
@@ -538,7 +538,7 @@ static int handle_stsi(struct kvm_vcpu *vcpu)
 	switch (fc) {
 	case 1: /* same handling for 1 and 2 */
 	case 2:
-		mem = get_zeroed_page(GFP_KERNEL);
+		mem = (unsigned long)get_zeroed_page(GFP_KERNEL);
 		if (!mem)
 			goto out_no_data;
 		if (stsi((void *) mem, fc, sel1, sel2))
@@ -547,7 +547,7 @@ static int handle_stsi(struct kvm_vcpu *vcpu)
 	case 3:
 		if (sel1 != 2 || sel2 != 2)
 			goto out_no_data;
-		mem = get_zeroed_page(GFP_KERNEL);
+		mem = (unsigned long)get_zeroed_page(GFP_KERNEL);
 		if (!mem)
 			goto out_no_data;
 		handle_stsi_3_2_2(vcpu, (void *) mem);
diff --git a/arch/s390/oprofile/hwsampler.c b/arch/s390/oprofile/hwsampler.c
index 62f6aa2..24165f3 100644
--- a/arch/s390/oprofile/hwsampler.c
+++ b/arch/s390/oprofile/hwsampler.c
@@ -279,7 +279,7 @@ static int allocate_sdbt(int cpu)
 
 		for (k = 0; k < num_sdb; k++) {
 			/* get and set SDB page */
-			sdb = get_zeroed_page(GFP_KERNEL);
+			sdb = (unsigned long)get_zeroed_page(GFP_KERNEL);
 
 			mutex_lock(&hws_sem_oom);
 			/* OOM killer might have been activated */
diff --git a/arch/sh/boards/mach-hp6xx/pm.c b/arch/sh/boards/mach-hp6xx/pm.c
index 83b3302..1a8aacd 100644
--- a/arch/sh/boards/mach-hp6xx/pm.c
+++ b/arch/sh/boards/mach-hp6xx/pm.c
@@ -68,7 +68,7 @@ static void pm_enter(void)
 
 	/* set interrupt handler */
 	asm volatile("stc vbr, %0" : "=r" (vbr_old));
-	vbr_new = get_zeroed_page(GFP_ATOMIC);
+	vbr_new = (unsigned long)get_zeroed_page(GFP_ATOMIC);
 	udelay(50);
 	memcpy((void*)(vbr_new + INTR_OFFSET),
 	       &wakeup_start, &wakeup_end - &wakeup_start);
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index e22416c..24847b2 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -1037,7 +1037,7 @@ static void __init init_cpu_send_mondo_info(struct trap_per_cpu *tb)
 
 	BUILD_BUG_ON((NR_CPUS * sizeof(u16)) > (PAGE_SIZE - 64));
 
-	page = get_zeroed_page(GFP_KERNEL);
+	page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!page) {
 		prom_printf("SUN4V: Error, cannot allocate cpu mondo page.\n");
 		prom_halt();
diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c
index 1a678fc..3eb8907 100644
--- a/arch/sparc/kernel/pci_sun4v.c
+++ b/arch/sparc/kernel/pci_sun4v.c
@@ -938,7 +938,7 @@ static int pci_sun4v_probe(struct platform_device *op)
 	err = -ENOMEM;
 	if (!iommu_batch_initialized) {
 		for_each_possible_cpu(i) {
-			unsigned long page = get_zeroed_page(GFP_KERNEL);
+			unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 
 			if (!page)
 				goto out_err;
diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c
index ef2762b..6898b23 100644
--- a/arch/um/kernel/skas/mmu.c
+++ b/arch/um/kernel/skas/mmu.c
@@ -54,7 +54,7 @@ int init_new_context(struct task_struct *task, struct mm_struct *mm)
 	unsigned long stack = 0;
 	int ret = -ENOMEM;
 
-	stack = get_zeroed_page(GFP_KERNEL);
+	stack = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (stack == 0)
 		goto out;
 
diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c
index 8e3842f..2ef2933 100644
--- a/arch/x86/kernel/amd_gart_64.c
+++ b/arch/x86/kernel/amd_gart_64.c
@@ -841,7 +841,7 @@ int __init gart_iommu_init(void)
 	 * Any prefetches that hit unmapped entries won't get an bus abort
 	 * then. (P2P bridge may be prefetching on DMA reads).
 	 */
-	scratch = get_zeroed_page(GFP_KERNEL);
+	scratch = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!scratch)
 		panic("Cannot allocate iommu scratch page");
 	gart_unmapped_entry = GPTE_ENCODE(__pa(scratch));
diff --git a/drivers/char/agp/efficeon-agp.c b/drivers/char/agp/efficeon-agp.c
index 1416595..c3d0d44 100644
--- a/drivers/char/agp/efficeon-agp.c
+++ b/drivers/char/agp/efficeon-agp.c
@@ -214,7 +214,7 @@ static int efficeon_create_gatt_table(struct agp_bridge_data *bridge)
 		page = efficeon_private.l1_table[index];
 		BUG_ON(page);
 
-		page = get_zeroed_page(GFP_KERNEL);
+		page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 		if (!page) {
 			efficeon_free_gatt_table(agp_bridge);
 			return -ENOMEM;
diff --git a/drivers/hsi/clients/cmt_speech.c b/drivers/hsi/clients/cmt_speech.c
index 7fa47a8..96d98fc 100644
--- a/drivers/hsi/clients/cmt_speech.c
+++ b/drivers/hsi/clients/cmt_speech.c
@@ -1300,7 +1300,7 @@ static int cs_char_open(struct inode *unused, struct file *file)
 	cs_char_data.dataind_pending = 0;
 	spin_unlock_bh(&cs_char_data.lock);
 
-	p = get_zeroed_page(GFP_KERNEL);
+	p = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!p) {
 		ret = -ENOMEM;
 		goto out2;
diff --git a/drivers/infiniband/hw/qib/qib_qp.c b/drivers/infiniband/hw/qib/qib_qp.c
index 6ff0112..0daa083 100644
--- a/drivers/infiniband/hw/qib/qib_qp.c
+++ b/drivers/infiniband/hw/qib/qib_qp.c
@@ -102,7 +102,7 @@ static u32 credit_table[31] = {
 
 static void get_map_page(struct qib_qpn_table *qpt, struct qpn_map *map)
 {
-	unsigned long page = get_zeroed_page(GFP_KERNEL);
+	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 
 	/*
 	 * Free the page if someone raced with us installing it.
diff --git a/drivers/lguest/lguest_user.c b/drivers/lguest/lguest_user.c
index 328e249..fe2e859 100644
--- a/drivers/lguest/lguest_user.c
+++ b/drivers/lguest/lguest_user.c
@@ -170,7 +170,7 @@ static int lg_cpu_start(struct lg_cpu *cpu, unsigned id, unsigned long start_ip)
 	 * We need a complete page for the Guest registers: they are accessible
 	 * to the Guest and we can only grant it access to whole pages.
 	 */
-	cpu->regs_page = get_zeroed_page(GFP_KERNEL);
+	cpu->regs_page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!cpu->regs_page)
 		return -ENOMEM;
 
diff --git a/drivers/lguest/page_tables.c b/drivers/lguest/page_tables.c
index 012b10a..de1c8ac 100644
--- a/drivers/lguest/page_tables.c
+++ b/drivers/lguest/page_tables.c
@@ -319,7 +319,7 @@ static pte_t *find_spte(struct lg_cpu *cpu, unsigned long vaddr, bool allocate,
 		if (!allocate)
 			return NULL;
 
-		ptepage = get_zeroed_page(GFP_KERNEL);
+		ptepage = (unsigned long)get_zeroed_page(GFP_KERNEL);
 		/*
 		 * This is not really the Guest's fault, but killing it is
 		 * simple for this corner case.
@@ -351,7 +351,7 @@ static pte_t *find_spte(struct lg_cpu *cpu, unsigned long vaddr, bool allocate,
 		if (!allocate)
 			return NULL;
 
-		ptepage = get_zeroed_page(GFP_KERNEL);
+		ptepage = (unsigned long)get_zeroed_page(GFP_KERNEL);
 
 		/*
 		 * This is not really the Guest's fault, but killing it is
diff --git a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wireless/libertas/debugfs.c
index f79c11f..12da2fa 100644
--- a/drivers/net/wireless/libertas/debugfs.c
+++ b/drivers/net/wireless/libertas/debugfs.c
@@ -34,7 +34,7 @@ static ssize_t lbs_dev_info(struct file *file, char __user *userbuf,
 {
 	struct lbs_private *priv = file->private_data;
 	size_t pos = 0;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	ssize_t res;
 	if (!buf)
@@ -59,7 +59,7 @@ static ssize_t lbs_sleepparams_write(struct file *file,
 	ssize_t buf_size, ret;
 	struct sleep_params sp;
 	int p1, p2, p3, p4, p5, p6;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	if (!buf)
 		return -ENOMEM;
@@ -99,7 +99,7 @@ static ssize_t lbs_sleepparams_read(struct file *file, char __user *userbuf,
 	ssize_t ret;
 	size_t pos = 0;
 	struct sleep_params sp;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	if (!buf)
 		return -ENOMEM;
@@ -127,7 +127,7 @@ static ssize_t lbs_host_sleep_write(struct file *file,
 	struct lbs_private *priv = file->private_data;
 	ssize_t buf_size, ret;
 	int host_sleep;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	if (!buf)
 		return -ENOMEM;
@@ -172,7 +172,7 @@ static ssize_t lbs_host_sleep_read(struct file *file, char __user *userbuf,
 	struct lbs_private *priv = file->private_data;
 	ssize_t ret;
 	size_t pos = 0;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	if (!buf)
 		return -ENOMEM;
@@ -449,7 +449,7 @@ static ssize_t lbs_rdmac_read(struct file *file, char __user *userbuf,
 	struct lbs_private *priv = file->private_data;
 	ssize_t pos = 0;
 	int ret;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	u32 val = 0;
 
@@ -473,7 +473,7 @@ static ssize_t lbs_rdmac_write(struct file *file,
 {
 	struct lbs_private *priv = file->private_data;
 	ssize_t res, buf_size;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	if (!buf)
 		return -ENOMEM;
@@ -498,7 +498,7 @@ static ssize_t lbs_wrmac_write(struct file *file,
 	struct lbs_private *priv = file->private_data;
 	ssize_t res, buf_size;
 	u32 offset, value;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	if (!buf)
 		return -ENOMEM;
@@ -530,7 +530,7 @@ static ssize_t lbs_rdbbp_read(struct file *file, char __user *userbuf,
 	struct lbs_private *priv = file->private_data;
 	ssize_t pos = 0;
 	int ret;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	u32 val;
 
@@ -555,7 +555,7 @@ static ssize_t lbs_rdbbp_write(struct file *file,
 {
 	struct lbs_private *priv = file->private_data;
 	ssize_t res, buf_size;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	if (!buf)
 		return -ENOMEM;
@@ -580,7 +580,7 @@ static ssize_t lbs_wrbbp_write(struct file *file,
 	struct lbs_private *priv = file->private_data;
 	ssize_t res, buf_size;
 	u32 offset, value;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	if (!buf)
 		return -ENOMEM;
@@ -612,7 +612,7 @@ static ssize_t lbs_rdrf_read(struct file *file, char __user *userbuf,
 	struct lbs_private *priv = file->private_data;
 	ssize_t pos = 0;
 	int ret;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	u32 val;
 
@@ -637,7 +637,7 @@ static ssize_t lbs_rdrf_write(struct file *file,
 {
 	struct lbs_private *priv = file->private_data;
 	ssize_t res, buf_size;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	if (!buf)
 		return -ENOMEM;
@@ -662,7 +662,7 @@ static ssize_t lbs_wrrf_write(struct file *file,
 	struct lbs_private *priv = file->private_data;
 	ssize_t res, buf_size;
 	u32 offset, value;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	if (!buf)
 		return -ENOMEM;
@@ -863,7 +863,7 @@ static ssize_t lbs_debugfs_read(struct file *file, char __user *userbuf,
 	char *p;
 	int i;
 	struct debug_data *d;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	if (!buf)
 		return -ENOMEM;
diff --git a/drivers/net/wireless/mwifiex/debugfs.c b/drivers/net/wireless/mwifiex/debugfs.c
index 4ed3dba..bc23464 100644
--- a/drivers/net/wireless/mwifiex/debugfs.c
+++ b/drivers/net/wireless/mwifiex/debugfs.c
@@ -79,7 +79,7 @@ mwifiex_info_read(struct file *file, char __user *ubuf,
 	struct net_device *netdev = priv->netdev;
 	struct netdev_hw_addr *ha;
 	struct netdev_queue *txq;
-	unsigned long page = get_zeroed_page(GFP_KERNEL);
+	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *p = (char *) page, fmt[64];
 	struct mwifiex_bss_info info;
 	ssize_t ret;
@@ -201,7 +201,7 @@ mwifiex_getlog_read(struct file *file, char __user *ubuf,
 {
 	struct mwifiex_private *priv =
 		(struct mwifiex_private *) file->private_data;
-	unsigned long page = get_zeroed_page(GFP_KERNEL);
+	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *p = (char *) page;
 	ssize_t ret;
 	struct mwifiex_ds_get_stats stats;
@@ -280,7 +280,7 @@ mwifiex_histogram_read(struct file *file, char __user *ubuf,
 	ssize_t ret;
 	struct mwifiex_histogram_data *phist_data;
 	int i, value;
-	unsigned long page = get_zeroed_page(GFP_KERNEL);
+	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *p = (char *)page;
 
 	if (!p)
@@ -413,7 +413,7 @@ mwifiex_debug_read(struct file *file, char __user *ubuf,
 {
 	struct mwifiex_private *priv =
 		(struct mwifiex_private *) file->private_data;
-	unsigned long page = get_zeroed_page(GFP_KERNEL);
+	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *p = (char *) page;
 	ssize_t ret;
 
@@ -447,7 +447,7 @@ static ssize_t
 mwifiex_regrdwr_write(struct file *file,
 		      const char __user *ubuf, size_t count, loff_t *ppos)
 {
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *) addr;
 	size_t buf_size = min_t(size_t, count, PAGE_SIZE - 1);
 	int ret;
@@ -491,7 +491,7 @@ mwifiex_regrdwr_read(struct file *file, char __user *ubuf,
 {
 	struct mwifiex_private *priv =
 		(struct mwifiex_private *) file->private_data;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *) addr;
 	int pos = 0, ret = 0;
 	u32 reg_value;
@@ -545,7 +545,7 @@ mwifiex_debug_mask_read(struct file *file, char __user *ubuf,
 {
 	struct mwifiex_private *priv =
 		(struct mwifiex_private *)file->private_data;
-	unsigned long page = get_zeroed_page(GFP_KERNEL);
+	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)page;
 	size_t ret = 0;
 	int pos = 0;
@@ -572,7 +572,7 @@ mwifiex_debug_mask_write(struct file *file, const char __user *ubuf,
 	int ret;
 	unsigned long debug_mask;
 	struct mwifiex_private *priv = (void *)file->private_data;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (void *)addr;
 	size_t buf_size = min(count, (size_t)(PAGE_SIZE - 1));
 
@@ -609,7 +609,7 @@ mwifiex_memrw_write(struct file *file, const char __user *ubuf, size_t count,
 	struct mwifiex_ds_mem_rw mem_rw;
 	u16 cmd_action;
 	struct mwifiex_private *priv = (void *)file->private_data;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (void *)addr;
 	size_t buf_size = min(count, (size_t)(PAGE_SIZE - 1));
 
@@ -658,7 +658,7 @@ mwifiex_memrw_read(struct file *file, char __user *ubuf,
 		   size_t count, loff_t *ppos)
 {
 	struct mwifiex_private *priv = (void *)file->private_data;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	int ret, pos = 0;
 
@@ -686,7 +686,7 @@ static ssize_t
 mwifiex_rdeeprom_write(struct file *file,
 		       const char __user *ubuf, size_t count, loff_t *ppos)
 {
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *) addr;
 	size_t buf_size = min_t(size_t, count, PAGE_SIZE - 1);
 	int ret = 0;
@@ -729,7 +729,7 @@ mwifiex_rdeeprom_read(struct file *file, char __user *ubuf,
 {
 	struct mwifiex_private *priv =
 		(struct mwifiex_private *) file->private_data;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *) addr;
 	int pos, ret, i;
 	u8 value[MAX_EEPROM_DATA];
@@ -771,7 +771,7 @@ mwifiex_hscfg_write(struct file *file, const char __user *ubuf,
 		    size_t count, loff_t *ppos)
 {
 	struct mwifiex_private *priv = (void *)file->private_data;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	size_t buf_size = min_t(size_t, count, PAGE_SIZE - 1);
 	int ret, arg_num;
@@ -836,7 +836,7 @@ mwifiex_hscfg_read(struct file *file, char __user *ubuf,
 		   size_t count, loff_t *ppos)
 {
 	struct mwifiex_private *priv = (void *)file->private_data;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
+	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	char *buf = (char *)addr;
 	int pos, ret;
 	struct mwifiex_ds_hs_cfg hscfg;
diff --git a/drivers/s390/char/sclp_ftp.c b/drivers/s390/char/sclp_ftp.c
index 66bf759..726e736 100644
--- a/drivers/s390/char/sclp_ftp.c
+++ b/drivers/s390/char/sclp_ftp.c
@@ -248,7 +248,7 @@ int sclp_ftp_startup(void)
 		return rc;
 
 #ifdef DEBUG
-	info = get_zeroed_page(GFP_KERNEL);
+	info = (unsigned long)get_zeroed_page(GFP_KERNEL);
 
 	if (info != 0) {
 		struct sysinfo_2_2_2 *info222 = (struct sysinfo_2_2_2 *)info;
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
index 86c4599..0b1ffc2 100644
--- a/drivers/s390/cio/qdio_main.c
+++ b/drivers/s390/cio/qdio_main.c
@@ -1282,7 +1282,7 @@ int qdio_allocate(struct qdio_initialize *init_data)
 	 * qdio_establish. In case of low memory and swap on a zfcp disk
 	 * we may not be able to allocate memory otherwise.
 	 */
-	irq_ptr->chsc_page = get_zeroed_page(GFP_KERNEL);
+	irq_ptr->chsc_page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!irq_ptr->chsc_page)
 		goto out_rel;
 
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index c753f8f..b6bd54c 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -3160,7 +3160,7 @@ static int qeth_query_setdiagass(struct qeth_card *card)
 
 static void qeth_get_trap_id(struct qeth_card *card, struct qeth_trap_id *tid)
 {
-	unsigned long info = get_zeroed_page(GFP_KERNEL);
+	unsigned long info = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	struct sysinfo_2_2_2 *info222 = (struct sysinfo_2_2_2 *)info;
 	struct sysinfo_3_2_2 *info322 = (struct sysinfo_3_2_2 *)info;
 	struct ccw_dev_id ccwid;
diff --git a/drivers/staging/rdma/ehca/ipz_pt_fn.c b/drivers/staging/rdma/ehca/ipz_pt_fn.c
index 0742740..267df34 100644
--- a/drivers/staging/rdma/ehca/ipz_pt_fn.c
+++ b/drivers/staging/rdma/ehca/ipz_pt_fn.c
@@ -140,7 +140,7 @@ static int alloc_small_queue_page(struct ipz_queue *queue, struct ehca_pd *pd)
 		if (!page)
 			goto out;
 
-		page->page = get_zeroed_page(GFP_KERNEL);
+		page->page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 		if (!page->page) {
 			kmem_cache_free(small_qp_cache, page);
 			goto out;
diff --git a/drivers/staging/rdma/hfi1/qp.c b/drivers/staging/rdma/hfi1/qp.c
index 6310b3c..4445610 100644
--- a/drivers/staging/rdma/hfi1/qp.c
+++ b/drivers/staging/rdma/hfi1/qp.c
@@ -120,7 +120,7 @@ static const u16 credit_table[31] = {
 
 static void get_map_page(struct hfi1_qpn_table *qpt, struct qpn_map *map)
 {
-	unsigned long page = get_zeroed_page(GFP_KERNEL);
+	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 
 	/*
 	 * Free the page if someone raced with us installing it.
diff --git a/drivers/staging/rdma/ipath/ipath_qp.c b/drivers/staging/rdma/ipath/ipath_qp.c
index 8ca0b76..51fa380 100644
--- a/drivers/staging/rdma/ipath/ipath_qp.c
+++ b/drivers/staging/rdma/ipath/ipath_qp.c
@@ -85,7 +85,7 @@ static u32 credit_table[31] = {
 
 static void get_map_page(struct ipath_qp_table *qpt, struct qpn_map *map)
 {
-	unsigned long page = get_zeroed_page(GFP_KERNEL);
+	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	unsigned long flags;
 
 	/*
diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c
index d245a36..ec87a8c 100644
--- a/drivers/tty/amiserial.c
+++ b/drivers/tty/amiserial.c
@@ -520,7 +520,7 @@ static int startup(struct tty_struct *tty, struct serial_state *info)
 	int	retval=0;
 	unsigned long page;
 
-	page = get_zeroed_page(GFP_KERNEL);
+	page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
index 3310706..7e3bee8 100644
--- a/drivers/tty/cyclades.c
+++ b/drivers/tty/cyclades.c
@@ -1273,7 +1273,7 @@ static int cy_startup(struct cyclades_port *info, struct tty_struct *tty)
 	card = info->card;
 	channel = info->line - card->first_line;
 
-	page = get_zeroed_page(GFP_KERNEL);
+	page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
diff --git a/drivers/tty/serial/crisv10.c b/drivers/tty/serial/crisv10.c
index 8e792c1..82a868d 100644
--- a/drivers/tty/serial/crisv10.c
+++ b/drivers/tty/serial/crisv10.c
@@ -2593,7 +2593,7 @@ startup(struct e100_serial * info)
 	unsigned long xmit_page;
 	int i;
 
-	xmit_page = get_zeroed_page(GFP_KERNEL);
+	xmit_page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!xmit_page)
 		return -ENOMEM;
 
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 9bc0284..3cdd727 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -152,7 +152,7 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state,
 	 */
 	if (!state->xmit.buf) {
 		/* This is protected by the per port mutex */
-		page = get_zeroed_page(GFP_KERNEL);
+		page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 		if (!page)
 			return -ENOMEM;
 
diff --git a/drivers/usb/mon/mon_bin.c b/drivers/usb/mon/mon_bin.c
index bd463eb..cdc68e5 100644
--- a/drivers/usb/mon/mon_bin.c
+++ b/drivers/usb/mon/mon_bin.c
@@ -1308,7 +1308,7 @@ static int mon_alloc_buff(struct mon_pgmap *map, int npages)
 	unsigned long vaddr;
 
 	for (n = 0; n < npages; n++) {
-		vaddr = get_zeroed_page(GFP_KERNEL);
+		vaddr = (unsigned long)get_zeroed_page(GFP_KERNEL);
 		if (vaddr == 0) {
 			while (n-- != 0)
 				free_page(map[n].ptr);
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
index 43eae6a..3e43b5a 100644
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -707,7 +707,7 @@ static int __init xenstored_local_init(void)
 	struct evtchn_alloc_unbound alloc_unbound;
 
 	/* Allocate Xenstore page */
-	page = get_zeroed_page(GFP_KERNEL);
+	page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!page)
 		goto out_err;
 
diff --git a/fs/configfs/symlink.c b/fs/configfs/symlink.c
index a04bf59..f8f4d9a 100644
--- a/fs/configfs/symlink.c
+++ b/fs/configfs/symlink.c
@@ -281,7 +281,7 @@ static int configfs_getlink(struct dentry *dentry, char * path)
 
 static const char *configfs_follow_link(struct dentry *dentry, void **cookie)
 {
-	unsigned long page = get_zeroed_page(GFP_KERNEL);
+	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	int error;
 
 	if (!page)
diff --git a/fs/kernfs/symlink.c b/fs/kernfs/symlink.c
index e98d520..9662b66 100644
--- a/fs/kernfs/symlink.c
+++ b/fs/kernfs/symlink.c
@@ -115,7 +115,7 @@ static int kernfs_getlink(struct dentry *dentry, char *path)
 static const char *kernfs_iop_follow_link(struct dentry *dentry, void **cookie)
 {
 	int error = -ENOMEM;
-	unsigned long page = get_zeroed_page(GFP_KERNEL);
+	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!page)
 		return ERR_PTR(-ENOMEM);
 	error = kernfs_getlink(dentry, (char *)page);
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index df5c0a0..f4304c1 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -474,7 +474,7 @@ extern struct page *alloc_kmem_pages_node(int nid, gfp_t gfp_mask,
 					  unsigned int order);
 
 extern unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order);
-extern unsigned long get_zeroed_page(gfp_t gfp_mask);
+extern void *get_zeroed_page(gfp_t gfp_mask);
 
 void *alloc_pages_exact(size_t size, gfp_t gfp_mask);
 void free_pages_exact(void *virt, size_t size);
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 11014f3..aa37489 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3274,9 +3274,9 @@ unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
 }
 EXPORT_SYMBOL(__get_free_pages);
 
-unsigned long get_zeroed_page(gfp_t gfp_mask)
+void *get_zeroed_page(gfp_t gfp_mask)
 {
-	return __get_free_pages(gfp_mask | __GFP_ZERO, 0);
+	return (void *)__get_free_pages(gfp_mask | __GFP_ZERO, 0);
 }
 EXPORT_SYMBOL(get_zeroed_page);
 
diff --git a/net/atm/proc.c b/net/atm/proc.c
index 2523c58..cf8993a 100644
--- a/net/atm/proc.c
+++ b/net/atm/proc.c
@@ -382,7 +382,7 @@ static ssize_t proc_dev_atm_read(struct file *file, char __user *buf,
 
 	if (count == 0)
 		return 0;
-	page = get_zeroed_page(GFP_KERNEL);
+	page = (unsigned long)get_zeroed_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 	dev = PDE_DATA(file_inode(file));
diff --git a/net/rds/cong.c b/net/rds/cong.c
index 15d4725..6f91538 100644
--- a/net/rds/cong.c
+++ b/net/rds/cong.c
@@ -149,7 +149,7 @@ static struct rds_cong_map *rds_cong_from_addr(__be32 addr)
 	INIT_LIST_HEAD(&map->m_conn_list);
 
 	for (i = 0; i < RDS_CONG_MAP_PAGES; i++) {
-		zp = get_zeroed_page(GFP_KERNEL);
+		zp = (unsigned long)get_zeroed_page(GFP_KERNEL);
 		if (zp == 0)
 			goto out;
 		map->m_page_addrs[i] = zp;
diff --git a/sound/oss/vidc.c b/sound/oss/vidc.c
index b73fcc3..3196f35 100644
--- a/sound/oss/vidc.c
+++ b/sound/oss/vidc.c
@@ -468,7 +468,7 @@ static void __init attach_vidc(struct address_info *hw_config)
 		goto mixer_failed;
 
 	for (i = 0; i < 2; i++) {
-		dma_buf[i] = get_zeroed_page(GFP_KERNEL);
+		dma_buf[i] = (unsigned long)get_zeroed_page(GFP_KERNEL);
 		if (!dma_buf[i]) {
 			printk(KERN_ERR "%s: can't allocate required buffers\n",
 				name);
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 04/83] kill unused {get,free}_user_page()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (2 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 03/83] switch get_zeroed_page() to returning " Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 05/83] switch copy_mount_options to storing void * instead of unsigned long Al Viro
                   ` (79 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/arc/include/asm/page.h       | 3 ---
 arch/arm/include/asm/page-nommu.h | 3 ---
 arch/frv/include/asm/page.h       | 3 ---
 arch/m68k/include/asm/page_mm.h   | 3 ---
 arch/m68k/include/asm/page_no.h   | 3 ---
 arch/openrisc/include/asm/page.h  | 3 ---
 include/asm-generic/page.h        | 3 ---
 7 files changed, 21 deletions(-)

diff --git a/arch/arc/include/asm/page.h b/arch/arc/include/asm/page.h
index fa23f40..adf5cbb 100644
--- a/arch/arc/include/asm/page.h
+++ b/arch/arc/include/asm/page.h
@@ -13,9 +13,6 @@
 
 #ifndef __ASSEMBLY__
 
-#define get_user_page(vaddr)		__get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)	free_page((void *)addr)
-
 #define clear_page(paddr)		memset((paddr), 0, PAGE_SIZE)
 #define copy_page(to, from)		memcpy((to), (from), PAGE_SIZE)
 
diff --git a/arch/arm/include/asm/page-nommu.h b/arch/arm/include/asm/page-nommu.h
index c4f6081..4c572de 100644
--- a/arch/arm/include/asm/page-nommu.h
+++ b/arch/arm/include/asm/page-nommu.h
@@ -16,9 +16,6 @@
 #else
 #define KTHREAD_SIZE PAGE_SIZE
 #endif
- 
-#define get_user_page(vaddr)		__get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)	free_page((void *)addr)
 
 #define clear_page(page)	memset((page), 0, PAGE_SIZE)
 #define copy_page(to,from)	memcpy((to), (from), PAGE_SIZE)
diff --git a/arch/frv/include/asm/page.h b/arch/frv/include/asm/page.h
index 870960c..52ace96 100644
--- a/arch/frv/include/asm/page.h
+++ b/arch/frv/include/asm/page.h
@@ -8,9 +8,6 @@
 
 #ifndef __ASSEMBLY__
 
-#define get_user_page(vaddr)			__get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)		free_page((void *)addr)
-
 #define clear_page(pgaddr)			memset((pgaddr), 0, PAGE_SIZE)
 #define copy_page(to,from)			memcpy((to), (from), PAGE_SIZE)
 
diff --git a/arch/m68k/include/asm/page_mm.h b/arch/m68k/include/asm/page_mm.h
index 1a735f8..e7a1946 100644
--- a/arch/m68k/include/asm/page_mm.h
+++ b/arch/m68k/include/asm/page_mm.h
@@ -6,9 +6,6 @@
 #include <linux/compiler.h>
 #include <asm/module.h>
 
-#define get_user_page(vaddr)		__get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)	free_page((void *)addr)
-
 /*
  * We don't need to check for alignment etc.
  */
diff --git a/arch/m68k/include/asm/page_no.h b/arch/m68k/include/asm/page_no.h
index 1f9ec40..fa7f32d 100644
--- a/arch/m68k/include/asm/page_no.h
+++ b/arch/m68k/include/asm/page_no.h
@@ -6,9 +6,6 @@
 extern unsigned long memory_start;
 extern unsigned long memory_end;
 
-#define get_user_page(vaddr)		__get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)	free_page((void *)addr)
-
 #define clear_page(page)	memset((page), 0, PAGE_SIZE)
 #define copy_page(to,from)	memcpy((to), (from), PAGE_SIZE)
 
diff --git a/arch/openrisc/include/asm/page.h b/arch/openrisc/include/asm/page.h
index 8ab6f6f..e613d36 100644
--- a/arch/openrisc/include/asm/page.h
+++ b/arch/openrisc/include/asm/page.h
@@ -40,9 +40,6 @@
 
 #ifndef __ASSEMBLY__
 
-#define get_user_page(vaddr)            __get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)      free_page((void *)addr)
-
 #define clear_page(page)	memset((page), 0, PAGE_SIZE)
 #define copy_page(to, from)	memcpy((to), (from), PAGE_SIZE)
 
diff --git a/include/asm-generic/page.h b/include/asm-generic/page.h
index 6c731ec..67cfb7d 100644
--- a/include/asm-generic/page.h
+++ b/include/asm-generic/page.h
@@ -24,9 +24,6 @@
 
 #ifndef __ASSEMBLY__
 
-#define get_user_page(vaddr)		__get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)	free_page((void *)addr)
-
 #define clear_page(page)	memset((page), 0, PAGE_SIZE)
 #define copy_page(to,from)	memcpy((to), (from), PAGE_SIZE)
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 05/83] switch copy_mount_options to storing void * instead of unsigned long
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (3 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 04/83] kill unused {get,free}_user_page() Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 06/83] drivers/net/wireless/libertas/debugfs.c: get rid of pointless casts Al Viro
                   ` (78 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 fs/compat.c    | 11 +++++------
 fs/internal.h  |  2 +-
 fs/namespace.c | 21 ++++++++++-----------
 3 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/fs/compat.c b/fs/compat.c
index c4708ae..254af5d 100644
--- a/fs/compat.c
+++ b/fs/compat.c
@@ -792,7 +792,7 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name,
 		       const void __user *, data)
 {
 	char *kernel_type;
-	unsigned long data_page;
+	void *data_page;
 	char *kernel_dev;
 	int retval;
 
@@ -814,18 +814,17 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name,
 
 	if (kernel_type && data_page) {
 		if (!strcmp(kernel_type, NCPFS_NAME)) {
-			do_ncp_super_data_conv((void *)data_page);
+			do_ncp_super_data_conv(data_page);
 		} else if (!strcmp(kernel_type, NFS4_NAME)) {
-			if (do_nfs4_super_data_conv((void *) data_page))
+			if (do_nfs4_super_data_conv(data_page))
 				goto out3;
 		}
 	}
 
-	retval = do_mount(kernel_dev, dir_name, kernel_type,
-			flags, (void*)data_page);
+	retval = do_mount(kernel_dev, dir_name, kernel_type, flags, data_page);
 
  out3:
-	free_page((void *)data_page);
+	free_page(data_page);
  out2:
 	kfree(kernel_dev);
  out1:
diff --git a/fs/internal.h b/fs/internal.h
index 71859c4d..8e64f77 100644
--- a/fs/internal.h
+++ b/fs/internal.h
@@ -55,7 +55,7 @@ extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
 /*
  * namespace.c
  */
-extern int copy_mount_options(const void __user *, unsigned long *);
+extern int copy_mount_options(const void __user *, void **);
 extern char *copy_mount_string(const void __user *);
 
 extern struct vfsmount *lookup_mnt(struct path *);
diff --git a/fs/namespace.c b/fs/namespace.c
index 55df421..4bcae39 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -2601,17 +2601,17 @@ static long exact_copy_from_user(void *to, const void __user * from,
 	return n;
 }
 
-int copy_mount_options(const void __user * data, unsigned long *where)
+int copy_mount_options(const void __user * data, void **where)
 {
 	int i;
-	unsigned long page;
+	char *page;
 	unsigned long size;
 
-	*where = 0;
+	*where = NULL;
 	if (!data)
 		return 0;
 
-	if (!(page = __get_free_page(GFP_KERNEL)))
+	if (!(page = (char *)__get_free_page(GFP_KERNEL)))
 		return -ENOMEM;
 
 	/* We only care that *some* data at the address the user
@@ -2623,13 +2623,13 @@ int copy_mount_options(const void __user * data, unsigned long *where)
 	if (size > PAGE_SIZE)
 		size = PAGE_SIZE;
 
-	i = size - exact_copy_from_user((void *)page, data, size);
+	i = size - exact_copy_from_user(page, data, size);
 	if (!i) {
-		free_page((void *)page);
+		free_page(page);
 		return -EFAULT;
 	}
 	if (i != PAGE_SIZE)
-		memset((char *)page + i, 0, PAGE_SIZE - i);
+		memset(page + i, 0, PAGE_SIZE - i);
 	*where = page;
 	return 0;
 }
@@ -2896,7 +2896,7 @@ SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,
 	int ret;
 	char *kernel_type;
 	char *kernel_dev;
-	unsigned long data_page;
+	void *data_page;
 
 	kernel_type = copy_mount_string(type);
 	ret = PTR_ERR(kernel_type);
@@ -2912,10 +2912,9 @@ SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,
 	if (ret < 0)
 		goto out_data;
 
-	ret = do_mount(kernel_dev, dir_name, kernel_type, flags,
-		(void *) data_page);
+	ret = do_mount(kernel_dev, dir_name, kernel_type, flags, data_page);
 
-	free_page((void *)data_page);
+	free_page(data_page);
 out_data:
 	kfree(kernel_dev);
 out_dev:
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 06/83] drivers/net/wireless/libertas/debugfs.c: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (4 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 05/83] switch copy_mount_options to storing void * instead of unsigned long Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 07/83] drivers/net/wireless/mwifiex/debugfs.c: " Al Viro
                   ` (77 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/net/wireless/libertas/debugfs.c | 81 +++++++++++++--------------------
 1 file changed, 32 insertions(+), 49 deletions(-)

diff --git a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wireless/libertas/debugfs.c
index 12da2fa..a189a09 100644
--- a/drivers/net/wireless/libertas/debugfs.c
+++ b/drivers/net/wireless/libertas/debugfs.c
@@ -34,8 +34,7 @@ static ssize_t lbs_dev_info(struct file *file, char __user *userbuf,
 {
 	struct lbs_private *priv = file->private_data;
 	size_t pos = 0;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	ssize_t res;
 	if (!buf)
 		return -ENOMEM;
@@ -47,7 +46,7 @@ static ssize_t lbs_dev_info(struct file *file, char __user *userbuf,
 
 	res = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
 
-	free_page((void *)addr);
+	free_page(buf);
 	return res;
 }
 
@@ -59,8 +58,7 @@ static ssize_t lbs_sleepparams_write(struct file *file,
 	ssize_t buf_size, ret;
 	struct sleep_params sp;
 	int p1, p2, p3, p4, p5, p6;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -88,7 +86,7 @@ static ssize_t lbs_sleepparams_write(struct file *file,
 		ret = -EINVAL;
 
 out_unlock:
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
@@ -99,8 +97,7 @@ static ssize_t lbs_sleepparams_read(struct file *file, char __user *userbuf,
 	ssize_t ret;
 	size_t pos = 0;
 	struct sleep_params sp;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -116,7 +113,7 @@ static ssize_t lbs_sleepparams_read(struct file *file, char __user *userbuf,
 	ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
 
 out_unlock:
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
@@ -127,8 +124,7 @@ static ssize_t lbs_host_sleep_write(struct file *file,
 	struct lbs_private *priv = file->private_data;
 	ssize_t buf_size, ret;
 	int host_sleep;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -162,7 +158,7 @@ static ssize_t lbs_host_sleep_write(struct file *file,
 		ret = count;
 
 out_unlock:
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
@@ -172,8 +168,7 @@ static ssize_t lbs_host_sleep_read(struct file *file, char __user *userbuf,
 	struct lbs_private *priv = file->private_data;
 	ssize_t ret;
 	size_t pos = 0;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -181,7 +176,7 @@ static ssize_t lbs_host_sleep_read(struct file *file, char __user *userbuf,
 
 	ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
 
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
@@ -230,12 +225,11 @@ static ssize_t lbs_threshold_read(uint16_t tlv_type, uint16_t event_mask,
 	struct lbs_private *priv = file->private_data;
 	ssize_t ret = 0;
 	size_t pos = 0;
-	char *buf;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	u8 value;
 	u8 freq;
 	int events = 0;
 
-	buf = (char *)get_zeroed_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -284,10 +278,9 @@ static ssize_t lbs_threshold_write(uint16_t tlv_type, uint16_t event_mask,
 	ssize_t buf_size;
 	int value, freq, new_mask;
 	uint16_t curr_mask;
-	char *buf;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	int ret;
 
-	buf = (char *)get_zeroed_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -449,8 +442,7 @@ static ssize_t lbs_rdmac_read(struct file *file, char __user *userbuf,
 	struct lbs_private *priv = file->private_data;
 	ssize_t pos = 0;
 	int ret;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	u32 val = 0;
 
 	if (!buf)
@@ -463,7 +455,7 @@ static ssize_t lbs_rdmac_read(struct file *file, char __user *userbuf,
 				priv->mac_offset, val);
 		ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
 	}
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
@@ -473,8 +465,7 @@ static ssize_t lbs_rdmac_write(struct file *file,
 {
 	struct lbs_private *priv = file->private_data;
 	ssize_t res, buf_size;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -486,7 +477,7 @@ static ssize_t lbs_rdmac_write(struct file *file,
 	priv->mac_offset = simple_strtoul(buf, NULL, 16);
 	res = count;
 out_unlock:
-	free_page((void *)addr);
+	free_page(buf);
 	return res;
 }
 
@@ -498,8 +489,7 @@ static ssize_t lbs_wrmac_write(struct file *file,
 	struct lbs_private *priv = file->private_data;
 	ssize_t res, buf_size;
 	u32 offset, value;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -520,7 +510,7 @@ static ssize_t lbs_wrmac_write(struct file *file,
 	if (!res)
 		res = count;
 out_unlock:
-	free_page((void *)addr);
+	free_page(buf);
 	return res;
 }
 
@@ -530,8 +520,7 @@ static ssize_t lbs_rdbbp_read(struct file *file, char __user *userbuf,
 	struct lbs_private *priv = file->private_data;
 	ssize_t pos = 0;
 	int ret;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	u32 val;
 
 	if (!buf)
@@ -544,7 +533,7 @@ static ssize_t lbs_rdbbp_read(struct file *file, char __user *userbuf,
 				priv->bbp_offset, val);
 		ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
 	}
-	free_page((void *)addr);
+	free_page(buf);
 
 	return ret;
 }
@@ -555,8 +544,7 @@ static ssize_t lbs_rdbbp_write(struct file *file,
 {
 	struct lbs_private *priv = file->private_data;
 	ssize_t res, buf_size;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -568,7 +556,7 @@ static ssize_t lbs_rdbbp_write(struct file *file,
 	priv->bbp_offset = simple_strtoul(buf, NULL, 16);
 	res = count;
 out_unlock:
-	free_page((void *)addr);
+	free_page(buf);
 	return res;
 }
 
@@ -580,8 +568,7 @@ static ssize_t lbs_wrbbp_write(struct file *file,
 	struct lbs_private *priv = file->private_data;
 	ssize_t res, buf_size;
 	u32 offset, value;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -602,7 +589,7 @@ static ssize_t lbs_wrbbp_write(struct file *file,
 	if (!res)
 		res = count;
 out_unlock:
-	free_page((void *)addr);
+	free_page(buf);
 	return res;
 }
 
@@ -612,8 +599,7 @@ static ssize_t lbs_rdrf_read(struct file *file, char __user *userbuf,
 	struct lbs_private *priv = file->private_data;
 	ssize_t pos = 0;
 	int ret;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	u32 val;
 
 	if (!buf)
@@ -626,7 +612,7 @@ static ssize_t lbs_rdrf_read(struct file *file, char __user *userbuf,
 				priv->rf_offset, val);
 		ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
 	}
-	free_page((void *)addr);
+	free_page(buf);
 
 	return ret;
 }
@@ -637,8 +623,7 @@ static ssize_t lbs_rdrf_write(struct file *file,
 {
 	struct lbs_private *priv = file->private_data;
 	ssize_t res, buf_size;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -650,7 +635,7 @@ static ssize_t lbs_rdrf_write(struct file *file,
 	priv->rf_offset = simple_strtoul(buf, NULL, 16);
 	res = count;
 out_unlock:
-	free_page((void *)addr);
+	free_page(buf);
 	return res;
 }
 
@@ -662,8 +647,7 @@ static ssize_t lbs_wrrf_write(struct file *file,
 	struct lbs_private *priv = file->private_data;
 	ssize_t res, buf_size;
 	u32 offset, value;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -684,7 +668,7 @@ static ssize_t lbs_wrrf_write(struct file *file,
 	if (!res)
 		res = count;
 out_unlock:
-	free_page((void *)addr);
+	free_page(buf);
 	return res;
 }
 
@@ -863,8 +847,7 @@ static ssize_t lbs_debugfs_read(struct file *file, char __user *userbuf,
 	char *p;
 	int i;
 	struct debug_data *d;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -887,7 +870,7 @@ static ssize_t lbs_debugfs_read(struct file *file, char __user *userbuf,
 
 	res = simple_read_from_buffer(userbuf, count, ppos, p, pos);
 
-	free_page((void *)addr);
+	free_page(buf);
 	return res;
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 07/83] drivers/net/wireless/mwifiex/debugfs.c: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (5 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 06/83] drivers/net/wireless/libertas/debugfs.c: get rid of pointless casts Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 08/83] affs_evict_inode(): " Al Viro
                   ` (76 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/net/wireless/mwifiex/debugfs.c | 84 ++++++++++++++--------------------
 1 file changed, 35 insertions(+), 49 deletions(-)

diff --git a/drivers/net/wireless/mwifiex/debugfs.c b/drivers/net/wireless/mwifiex/debugfs.c
index bc23464..c9d83f9 100644
--- a/drivers/net/wireless/mwifiex/debugfs.c
+++ b/drivers/net/wireless/mwifiex/debugfs.c
@@ -79,8 +79,8 @@ mwifiex_info_read(struct file *file, char __user *ubuf,
 	struct net_device *netdev = priv->netdev;
 	struct netdev_hw_addr *ha;
 	struct netdev_queue *txq;
-	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *p = (char *) page, fmt[64];
+	char *page = get_zeroed_page(GFP_KERNEL);
+	char *p = page, fmt[64];
 	struct mwifiex_bss_info info;
 	ssize_t ret;
 	int i = 0;
@@ -143,11 +143,10 @@ mwifiex_info_read(struct file *file, char __user *ubuf,
 	}
 	p += sprintf(p, "\n");
 
-	ret = simple_read_from_buffer(ubuf, count, ppos, (char *) page,
-				      (unsigned long) p - page);
+	ret = simple_read_from_buffer(ubuf, count, ppos, page, p - page);
 
 free_and_exit:
-	free_page((void *)page);
+	free_page(page);
 	return ret;
 }
 
@@ -201,8 +200,8 @@ mwifiex_getlog_read(struct file *file, char __user *ubuf,
 {
 	struct mwifiex_private *priv =
 		(struct mwifiex_private *) file->private_data;
-	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *p = (char *) page;
+	char *page = get_zeroed_page(GFP_KERNEL);
+	char *p = page;
 	ssize_t ret;
 	struct mwifiex_ds_get_stats stats;
 
@@ -253,11 +252,10 @@ mwifiex_getlog_read(struct file *file, char __user *ubuf,
 		     stats.bcn_miss_cnt);
 
 
-	ret = simple_read_from_buffer(ubuf, count, ppos, (char *) page,
-				      (unsigned long) p - page);
+	ret = simple_read_from_buffer(ubuf, count, ppos, page, p - page);
 
 free_and_exit:
-	free_page((void *)page);
+	free_page(page);
 	return ret;
 }
 
@@ -280,8 +278,8 @@ mwifiex_histogram_read(struct file *file, char __user *ubuf,
 	ssize_t ret;
 	struct mwifiex_histogram_data *phist_data;
 	int i, value;
-	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *p = (char *)page;
+	char *page = get_zeroed_page(GFP_KERNEL);
+	char *p = page;
 
 	if (!p)
 		return -ENOMEM;
@@ -341,8 +339,7 @@ mwifiex_histogram_read(struct file *file, char __user *ubuf,
 				i, value);
 	}
 
-	ret = simple_read_from_buffer(ubuf, count, ppos, (char *)page,
-				      (unsigned long)p - page);
+	ret = simple_read_from_buffer(ubuf, count, ppos, page, p - page);
 
 	return ret;
 }
@@ -413,8 +410,8 @@ mwifiex_debug_read(struct file *file, char __user *ubuf,
 {
 	struct mwifiex_private *priv =
 		(struct mwifiex_private *) file->private_data;
-	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *p = (char *) page;
+	char *page = get_zeroed_page(GFP_KERNEL);
+	char *p = page;
 	ssize_t ret;
 
 	if (!p)
@@ -426,11 +423,10 @@ mwifiex_debug_read(struct file *file, char __user *ubuf,
 
 	p += mwifiex_debug_info_to_buffer(priv, p, &info);
 
-	ret = simple_read_from_buffer(ubuf, count, ppos, (char *) page,
-				      (unsigned long) p - page);
+	ret = simple_read_from_buffer(ubuf, count, ppos, page, p - page);
 
 free_and_exit:
-	free_page((void *)page);
+	free_page(page);
 	return ret;
 }
 
@@ -447,8 +443,7 @@ static ssize_t
 mwifiex_regrdwr_write(struct file *file,
 		      const char __user *ubuf, size_t count, loff_t *ppos)
 {
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *) addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	size_t buf_size = min_t(size_t, count, PAGE_SIZE - 1);
 	int ret;
 	u32 reg_type = 0, reg_offset = 0, reg_value = UINT_MAX;
@@ -474,7 +469,7 @@ mwifiex_regrdwr_write(struct file *file,
 		ret = count;
 	}
 done:
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
@@ -491,8 +486,7 @@ mwifiex_regrdwr_read(struct file *file, char __user *ubuf,
 {
 	struct mwifiex_private *priv =
 		(struct mwifiex_private *) file->private_data;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *) addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	int pos = 0, ret = 0;
 	u32 reg_value;
 
@@ -531,7 +525,7 @@ mwifiex_regrdwr_read(struct file *file, char __user *ubuf,
 	ret = simple_read_from_buffer(ubuf, count, ppos, buf, pos);
 
 done:
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
@@ -545,8 +539,7 @@ mwifiex_debug_mask_read(struct file *file, char __user *ubuf,
 {
 	struct mwifiex_private *priv =
 		(struct mwifiex_private *)file->private_data;
-	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)page;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	size_t ret = 0;
 	int pos = 0;
 
@@ -557,7 +550,7 @@ mwifiex_debug_mask_read(struct file *file, char __user *ubuf,
 			priv->adapter->debug_mask);
 	ret = simple_read_from_buffer(ubuf, count, ppos, buf, pos);
 
-	free_page((void *)page);
+	free_page(buf);
 	return ret;
 }
 
@@ -572,8 +565,7 @@ mwifiex_debug_mask_write(struct file *file, const char __user *ubuf,
 	int ret;
 	unsigned long debug_mask;
 	struct mwifiex_private *priv = (void *)file->private_data;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (void *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	size_t buf_size = min(count, (size_t)(PAGE_SIZE - 1));
 
 	if (!buf)
@@ -592,7 +584,7 @@ mwifiex_debug_mask_write(struct file *file, const char __user *ubuf,
 	priv->adapter->debug_mask = debug_mask;
 	ret = count;
 done:
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
@@ -609,8 +601,7 @@ mwifiex_memrw_write(struct file *file, const char __user *ubuf, size_t count,
 	struct mwifiex_ds_mem_rw mem_rw;
 	u16 cmd_action;
 	struct mwifiex_private *priv = (void *)file->private_data;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (void *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	size_t buf_size = min(count, (size_t)(PAGE_SIZE - 1));
 
 	if (!buf)
@@ -645,7 +636,7 @@ mwifiex_memrw_write(struct file *file, const char __user *ubuf, size_t count,
 		ret = count;
 
 done:
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
@@ -658,8 +649,7 @@ mwifiex_memrw_read(struct file *file, char __user *ubuf,
 		   size_t count, loff_t *ppos)
 {
 	struct mwifiex_private *priv = (void *)file->private_data;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	int ret, pos = 0;
 
 	if (!buf)
@@ -669,7 +659,7 @@ mwifiex_memrw_read(struct file *file, char __user *ubuf,
 			priv->mem_rw.value);
 	ret = simple_read_from_buffer(ubuf, count, ppos, buf, pos);
 
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
@@ -686,8 +676,7 @@ static ssize_t
 mwifiex_rdeeprom_write(struct file *file,
 		       const char __user *ubuf, size_t count, loff_t *ppos)
 {
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *) addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	size_t buf_size = min_t(size_t, count, PAGE_SIZE - 1);
 	int ret = 0;
 	int offset = -1, bytes = -1;
@@ -712,7 +701,7 @@ mwifiex_rdeeprom_write(struct file *file,
 		ret = count;
 	}
 done:
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
@@ -729,8 +718,7 @@ mwifiex_rdeeprom_read(struct file *file, char __user *ubuf,
 {
 	struct mwifiex_private *priv =
 		(struct mwifiex_private *) file->private_data;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *) addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	int pos, ret, i;
 	u8 value[MAX_EEPROM_DATA];
 
@@ -759,7 +747,7 @@ mwifiex_rdeeprom_read(struct file *file, char __user *ubuf,
 done:
 	ret = simple_read_from_buffer(ubuf, count, ppos, buf, pos);
 out_free:
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
@@ -771,8 +759,7 @@ mwifiex_hscfg_write(struct file *file, const char __user *ubuf,
 		    size_t count, loff_t *ppos)
 {
 	struct mwifiex_private *priv = (void *)file->private_data;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	size_t buf_size = min_t(size_t, count, PAGE_SIZE - 1);
 	int ret, arg_num;
 	struct mwifiex_ds_hs_cfg hscfg;
@@ -823,7 +810,7 @@ mwifiex_hscfg_write(struct file *file, const char __user *ubuf,
 	priv->adapter->hs_enabling = false;
 	ret = count;
 done:
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
@@ -836,8 +823,7 @@ mwifiex_hscfg_read(struct file *file, char __user *ubuf,
 		   size_t count, loff_t *ppos)
 {
 	struct mwifiex_private *priv = (void *)file->private_data;
-	unsigned long addr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *)addr;
+	char *buf = get_zeroed_page(GFP_KERNEL);
 	int pos, ret;
 	struct mwifiex_ds_hs_cfg hscfg;
 
@@ -852,7 +838,7 @@ mwifiex_hscfg_read(struct file *file, char __user *ubuf,
 
 	ret = simple_read_from_buffer(ubuf, count, ppos, buf, pos);
 
-	free_page((void *)addr);
+	free_page(buf);
 	return ret;
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 08/83] affs_evict_inode(): get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (6 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 07/83] drivers/net/wireless/mwifiex/debugfs.c: " Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 09/83] configfs_follow_link(): " Al Viro
                   ` (75 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 fs/affs/inode.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/affs/inode.c b/fs/affs/inode.c
index dcfa753..dac9c7a 100644
--- a/fs/affs/inode.c
+++ b/fs/affs/inode.c
@@ -256,7 +256,7 @@ out:
 void
 affs_evict_inode(struct inode *inode)
 {
-	unsigned long cache_page;
+	void *cache_page;
 	pr_debug("evict_inode(ino=%lu, nlink=%u)\n",
 		 inode->i_ino, inode->i_nlink);
 	truncate_inode_pages_final(&inode->i_data);
@@ -269,12 +269,12 @@ affs_evict_inode(struct inode *inode)
 	invalidate_inode_buffers(inode);
 	clear_inode(inode);
 	affs_free_prealloc(inode);
-	cache_page = (unsigned long)AFFS_I(inode)->i_lc;
+	cache_page = AFFS_I(inode)->i_lc;
 	if (cache_page) {
 		pr_debug("freeing ext cache\n");
 		AFFS_I(inode)->i_lc = NULL;
 		AFFS_I(inode)->i_ac = NULL;
-		free_page((void *)cache_page);
+		free_page(cache_page);
 	}
 	affs_brelse(AFFS_I(inode)->i_ext_bh);
 	AFFS_I(inode)->i_ext_last = ~1;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 09/83] configfs_follow_link(): get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (7 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 08/83] affs_evict_inode(): " Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 10/83] kernfs_iop_follow_link(): " Al Viro
                   ` (74 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 fs/configfs/symlink.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/configfs/symlink.c b/fs/configfs/symlink.c
index f8f4d9a..ae41e92 100644
--- a/fs/configfs/symlink.c
+++ b/fs/configfs/symlink.c
@@ -281,18 +281,18 @@ static int configfs_getlink(struct dentry *dentry, char * path)
 
 static const char *configfs_follow_link(struct dentry *dentry, void **cookie)
 {
-	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	void *page = get_zeroed_page(GFP_KERNEL);
 	int error;
 
 	if (!page)
 		return ERR_PTR(-ENOMEM);
 
-	error = configfs_getlink(dentry, (char *)page);
+	error = configfs_getlink(dentry, page);
 	if (!error) {
-		return *cookie = (void *)page;
+		return *cookie = page;
 	}
 
-	free_page((void *)page);
+	free_page(page);
 	return ERR_PTR(error);
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 10/83] kernfs_iop_follow_link(): get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (8 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 09/83] configfs_follow_link(): " Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 11/83] sound/oss/vidc: keep dma_buf[] as pointers Al Viro
                   ` (73 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 fs/kernfs/symlink.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/kernfs/symlink.c b/fs/kernfs/symlink.c
index 9662b66..ac8768b 100644
--- a/fs/kernfs/symlink.c
+++ b/fs/kernfs/symlink.c
@@ -115,15 +115,15 @@ static int kernfs_getlink(struct dentry *dentry, char *path)
 static const char *kernfs_iop_follow_link(struct dentry *dentry, void **cookie)
 {
 	int error = -ENOMEM;
-	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	void *page = get_zeroed_page(GFP_KERNEL);
 	if (!page)
 		return ERR_PTR(-ENOMEM);
-	error = kernfs_getlink(dentry, (char *)page);
+	error = kernfs_getlink(dentry, page);
 	if (unlikely(error < 0)) {
-		free_page((void *)page);
+		free_page(page);
 		return ERR_PTR(error);
 	}
-	return *cookie = (char *)page;
+	return *cookie = page;
 }
 
 const struct inode_operations kernfs_symlink_iops = {
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 11/83] sound/oss/vidc: keep dma_buf[] as pointers
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (9 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 10/83] kernfs_iop_follow_link(): " Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 12/83] drivers/tty: get rid of pointless casts Al Viro
                   ` (72 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 sound/oss/vidc.c | 8 ++++----
 sound/oss/vidc.h | 3 ++-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/sound/oss/vidc.c b/sound/oss/vidc.c
index 3196f35..6ab875d 100644
--- a/sound/oss/vidc.c
+++ b/sound/oss/vidc.c
@@ -468,13 +468,13 @@ static void __init attach_vidc(struct address_info *hw_config)
 		goto mixer_failed;
 
 	for (i = 0; i < 2; i++) {
-		dma_buf[i] = (unsigned long)get_zeroed_page(GFP_KERNEL);
+		dma_buf[i] = get_zeroed_page(GFP_KERNEL);
 		if (!dma_buf[i]) {
 			printk(KERN_ERR "%s: can't allocate required buffers\n",
 				name);
 			goto mem_failed;
 		}
-		dma_pbuf[i] = virt_to_phys((void *)dma_buf[i]);
+		dma_pbuf[i] = virt_to_phys(dma_buf[i]);
 	}
 
 	if (sound_alloc_dma(hw_config->dma, hw_config->name)) {
@@ -497,7 +497,7 @@ irq_failed:
 dma_failed:
 mem_failed:
 	for (i = 0; i < 2; i++)
-		free_page((void *)dma_buf[i]);
+		free_page(dma_buf[i]);
 	sound_unload_mixerdev(audio_devs[adev]->mixer_dev);
 mixer_failed:
 	sound_unload_audiodev(adev);
@@ -528,7 +528,7 @@ static void __exit unload_vidc(struct address_info *hw_config)
 		sound_unload_mixerdev(audio_devs[adev]->mixer_dev);
 		sound_unload_audiodev(adev);
 		for (i = 0; i < 2; i++)
-			free_page((void *)dma_buf[i]);
+			free_page(dma_buf[i]);
 	}
 }
 
diff --git a/sound/oss/vidc.h b/sound/oss/vidc.h
index 0d14247..f079010 100644
--- a/sound/oss/vidc.h
+++ b/sound/oss/vidc.h
@@ -53,7 +53,8 @@ extern irqreturn_t (*dma_interrupt) (void);
  */
 
 extern unsigned long dma_start, dma_count, dma_bufsize;
-extern unsigned long dma_buf[2], dma_pbuf[2];
+extern unsigned long dma_pbuf[2];
+extern void *dma_buf[2];
 
 /* vidc_synth.c */
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 12/83] drivers/tty: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (10 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 11/83] sound/oss/vidc: keep dma_buf[] as pointers Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 13/83] rds: keep pointers in ->m_page_addrs[] Al Viro
                   ` (71 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/tty/amiserial.c          | 10 +++++-----
 drivers/tty/cyclades.c           | 10 +++++-----
 drivers/tty/mxser.c              |  8 ++++----
 drivers/tty/rocket.c             |  8 ++++----
 drivers/tty/serial/crisv10.c     | 10 +++++-----
 drivers/tty/serial/serial_core.c |  6 +++---
 drivers/tty/tty_port.c           |  2 +-
 7 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c
index ec87a8c..43605c9 100644
--- a/drivers/tty/amiserial.c
+++ b/drivers/tty/amiserial.c
@@ -518,23 +518,23 @@ static int startup(struct tty_struct *tty, struct serial_state *info)
 	struct tty_port *port = &info->tport;
 	unsigned long flags;
 	int	retval=0;
-	unsigned long page;
+	unsigned char *page;
 
-	page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	page = get_zeroed_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
 	local_irq_save(flags);
 
 	if (port->flags & ASYNC_INITIALIZED) {
-		free_page((void *)page);
+		free_page(page);
 		goto errout;
 	}
 
 	if (info->xmit.buf)
-		free_page((void *)page);
+		free_page(page);
 	else
-		info->xmit.buf = (unsigned char *) page;
+		info->xmit.buf = page;
 
 #ifdef SERIAL_DEBUG_OPEN
 	printk("starting up ttys%d ...", info->line);
diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
index 7e3bee8..fa4edc1 100644
--- a/drivers/tty/cyclades.c
+++ b/drivers/tty/cyclades.c
@@ -1268,12 +1268,12 @@ static int cy_startup(struct cyclades_port *info, struct tty_struct *tty)
 	unsigned long flags;
 	int retval = 0;
 	int channel;
-	unsigned long page;
+	unsigned char *page;
 
 	card = info->card;
 	channel = info->line - card->first_line;
 
-	page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	page = get_zeroed_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
@@ -1288,9 +1288,9 @@ static int cy_startup(struct cyclades_port *info, struct tty_struct *tty)
 	}
 
 	if (info->port.xmit_buf)
-		free_page((void *)page);
+		free_page(page);
 	else
-		info->port.xmit_buf = (unsigned char *)page;
+		info->port.xmit_buf = page;
 
 	spin_unlock_irqrestore(&card->card_lock, flags);
 
@@ -1383,7 +1383,7 @@ static int cy_startup(struct cyclades_port *info, struct tty_struct *tty)
 
 errout:
 	spin_unlock_irqrestore(&card->card_lock, flags);
-	free_page((void *)page);
+	free_page(page);
 	return retval;
 }				/* startup */
 
diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index b730857..ee78fc2 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -862,10 +862,10 @@ static void mxser_check_modem_status(struct tty_struct *tty,
 static int mxser_activate(struct tty_port *port, struct tty_struct *tty)
 {
 	struct mxser_port *info = container_of(port, struct mxser_port, port);
-	unsigned long page;
+	unsigned char *page;
 	unsigned long flags;
 
-	page = __get_free_page(GFP_KERNEL);
+	page = (unsigned char *)__get_free_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
@@ -873,11 +873,11 @@ static int mxser_activate(struct tty_port *port, struct tty_struct *tty)
 
 	if (!info->ioaddr || !info->type) {
 		set_bit(TTY_IO_ERROR, &tty->flags);
-		free_page((void *)page);
+		free_page(page);
 		spin_unlock_irqrestore(&info->slock, flags);
 		return 0;
 	}
-	info->port.xmit_buf = (unsigned char *) page;
+	info->port.xmit_buf = page;
 
 	/*
 	 * Clear the FIFO buffers and disable them
diff --git a/drivers/tty/rocket.c b/drivers/tty/rocket.c
index 2ed96e3..78f0330 100644
--- a/drivers/tty/rocket.c
+++ b/drivers/tty/rocket.c
@@ -884,14 +884,14 @@ static int rp_open(struct tty_struct *tty, struct file *filp)
 	struct tty_port *port;
 	int retval;
 	CHANNEL_t *cp;
-	unsigned long page;
+	unsigned char *page;
 
 	info = rp_table[tty->index];
 	if (info == NULL)
 		return -ENXIO;
 	port = &info->port;
 	
-	page = __get_free_page(GFP_KERNEL);
+	page = (unsigned char *)__get_free_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
@@ -899,9 +899,9 @@ static int rp_open(struct tty_struct *tty, struct file *filp)
 	 * We must not sleep from here until the port is marked fully in use.
 	 */
 	if (info->xmit_buf)
-		free_page((void *)page);
+		free_page(page);
 	else
-		info->xmit_buf = (unsigned char *) page;
+		info->xmit_buf = page;
 
 	tty->driver_data = info;
 	tty_port_tty_set(port, tty);
diff --git a/drivers/tty/serial/crisv10.c b/drivers/tty/serial/crisv10.c
index 82a868d..8cc4d1f 100644
--- a/drivers/tty/serial/crisv10.c
+++ b/drivers/tty/serial/crisv10.c
@@ -2590,10 +2590,10 @@ static int
 startup(struct e100_serial * info)
 {
 	unsigned long flags;
-	unsigned long xmit_page;
+	unsigned char *xmit_page;
 	int i;
 
-	xmit_page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	xmit_page = get_zeroed_page(GFP_KERNEL);
 	if (!xmit_page)
 		return -ENOMEM;
 
@@ -2603,14 +2603,14 @@ startup(struct e100_serial * info)
 
 	if (info->port.flags & ASYNC_INITIALIZED) {
 		local_irq_restore(flags);
-		free_page((void *)xmit_page);
+		free_page(xmit_page);
 		return 0;
 	}
 
 	if (info->xmit.buf)
-		free_page((void *)xmit_page);
+		free_page(xmit_page);
 	else
-		info->xmit.buf = (unsigned char *) xmit_page;
+		info->xmit.buf = xmit_page;
 
 #ifdef SERIAL_DEBUG_OPEN
 	printk("starting up ttyS%d (xmit_buf 0x%p)...\n", info->line, info->xmit.buf);
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 3cdd727..a16d25e 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -135,7 +135,7 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state,
 		int init_hw)
 {
 	struct uart_port *uport = state->uart_port;
-	unsigned long page;
+	unsigned char *page;
 	int retval = 0;
 
 	if (uport->type == PORT_UNKNOWN)
@@ -152,11 +152,11 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state,
 	 */
 	if (!state->xmit.buf) {
 		/* This is protected by the per port mutex */
-		page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+		page = get_zeroed_page(GFP_KERNEL);
 		if (!page)
 			return -ENOMEM;
 
-		state->xmit.buf = (unsigned char *) page;
+		state->xmit.buf = page;
 		uart_circ_clear(&state->xmit);
 	}
 
diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c
index 3fe48c7..ad4bee7 100644
--- a/drivers/tty/tty_port.c
+++ b/drivers/tty/tty_port.c
@@ -101,7 +101,7 @@ int tty_port_alloc_xmit_buf(struct tty_port *port)
 	/* We may sleep in get_zeroed_page() */
 	mutex_lock(&port->buf_mutex);
 	if (port->xmit_buf == NULL)
-		port->xmit_buf = (unsigned char *)get_zeroed_page(GFP_KERNEL);
+		port->xmit_buf = get_zeroed_page(GFP_KERNEL);
 	mutex_unlock(&port->buf_mutex);
 	if (port->xmit_buf == NULL)
 		return -ENOMEM;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 13/83] rds: keep pointers in ->m_page_addrs[]
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (11 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 12/83] drivers/tty: get rid of pointless casts Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 14/83] proc_dev_atm_read(): get rid of pointless casts Al Viro
                   ` (70 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 net/rds/cong.c     | 16 ++++++++--------
 net/rds/ib_recv.c  |  2 +-
 net/rds/iw_recv.c  |  2 +-
 net/rds/message.c  |  2 +-
 net/rds/rds.h      |  4 ++--
 net/rds/tcp_recv.c |  2 +-
 6 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/net/rds/cong.c b/net/rds/cong.c
index 6f91538..a56b076 100644
--- a/net/rds/cong.c
+++ b/net/rds/cong.c
@@ -136,7 +136,7 @@ static struct rds_cong_map *rds_cong_from_addr(__be32 addr)
 {
 	struct rds_cong_map *map;
 	struct rds_cong_map *ret = NULL;
-	unsigned long zp;
+	void *zp;
 	unsigned long i;
 	unsigned long flags;
 
@@ -149,8 +149,8 @@ static struct rds_cong_map *rds_cong_from_addr(__be32 addr)
 	INIT_LIST_HEAD(&map->m_conn_list);
 
 	for (i = 0; i < RDS_CONG_MAP_PAGES; i++) {
-		zp = (unsigned long)get_zeroed_page(GFP_KERNEL);
-		if (zp == 0)
+		zp = get_zeroed_page(GFP_KERNEL);
+		if (!zp)
 			goto out;
 		map->m_page_addrs[i] = zp;
 	}
@@ -167,7 +167,7 @@ static struct rds_cong_map *rds_cong_from_addr(__be32 addr)
 out:
 	if (map) {
 		for (i = 0; i < RDS_CONG_MAP_PAGES && map->m_page_addrs[i]; i++)
-			free_page((void *)map->m_page_addrs[i]);
+			free_page(map->m_page_addrs[i]);
 		kfree(map);
 	}
 
@@ -299,7 +299,7 @@ void rds_cong_set_bit(struct rds_cong_map *map, __be16 port)
 	i = be16_to_cpu(port) / RDS_CONG_MAP_PAGE_BITS;
 	off = be16_to_cpu(port) % RDS_CONG_MAP_PAGE_BITS;
 
-	__set_bit_le(off, (void *)map->m_page_addrs[i]);
+	__set_bit_le(off, map->m_page_addrs[i]);
 }
 
 void rds_cong_clear_bit(struct rds_cong_map *map, __be16 port)
@@ -313,7 +313,7 @@ void rds_cong_clear_bit(struct rds_cong_map *map, __be16 port)
 	i = be16_to_cpu(port) / RDS_CONG_MAP_PAGE_BITS;
 	off = be16_to_cpu(port) % RDS_CONG_MAP_PAGE_BITS;
 
-	__clear_bit_le(off, (void *)map->m_page_addrs[i]);
+	__clear_bit_le(off, map->m_page_addrs[i]);
 }
 
 static int rds_cong_test_bit(struct rds_cong_map *map, __be16 port)
@@ -324,7 +324,7 @@ static int rds_cong_test_bit(struct rds_cong_map *map, __be16 port)
 	i = be16_to_cpu(port) / RDS_CONG_MAP_PAGE_BITS;
 	off = be16_to_cpu(port) % RDS_CONG_MAP_PAGE_BITS;
 
-	return test_bit_le(off, (void *)map->m_page_addrs[i]);
+	return test_bit_le(off, map->m_page_addrs[i]);
 }
 
 void rds_cong_add_socket(struct rds_sock *rs)
@@ -399,7 +399,7 @@ void rds_cong_exit(void)
 		rdsdebug("freeing map %p\n", map);
 		rb_erase(&map->m_rb_node, &rds_cong_tree);
 		for (i = 0; i < RDS_CONG_MAP_PAGES && map->m_page_addrs[i]; i++)
-			free_page((void *)map->m_page_addrs[i]);
+			free_page(map->m_page_addrs[i]);
 		kfree(map);
 	}
 }
diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c
index 977fb86..74cb081 100644
--- a/net/rds/ib_recv.c
+++ b/net/rds/ib_recv.c
@@ -797,7 +797,7 @@ static void rds_ib_cong_recv(struct rds_connection *conn,
 		addr = kmap_atomic(sg_page(&frag->f_sg));
 
 		src = addr + frag_off;
-		dst = (void *)map->m_page_addrs[map_page] + map_off;
+		dst = map->m_page_addrs[map_page] + map_off;
 		for (k = 0; k < to_copy; k += 8) {
 			/* Record ports that became uncongested, ie
 			 * bits that changed from 0 to 1. */
diff --git a/net/rds/iw_recv.c b/net/rds/iw_recv.c
index a66d179..c83e6e2 100644
--- a/net/rds/iw_recv.c
+++ b/net/rds/iw_recv.c
@@ -586,7 +586,7 @@ static void rds_iw_cong_recv(struct rds_connection *conn,
 		addr = kmap_atomic(frag->f_page);
 
 		src = addr + frag_off;
-		dst = (void *)map->m_page_addrs[map_page] + map_off;
+		dst = map->m_page_addrs[map_page] + map_off;
 		for (k = 0; k < to_copy; k += 8) {
 			/* Record ports that became uncongested, ie
 			 * bits that changed from 0 to 1. */
diff --git a/net/rds/message.c b/net/rds/message.c
index 756c737..6adea64 100644
--- a/net/rds/message.c
+++ b/net/rds/message.c
@@ -235,7 +235,7 @@ struct scatterlist *rds_message_alloc_sgs(struct rds_message *rm, int nents)
 	return sg_ret;
 }
 
-struct rds_message *rds_message_map_pages(unsigned long *page_addrs, unsigned int total_len)
+struct rds_message *rds_message_map_pages(void **page_addrs, unsigned int total_len)
 {
 	struct rds_message *rm;
 	unsigned int i;
diff --git a/net/rds/rds.h b/net/rds/rds.h
index 0e2797b..d315431 100644
--- a/net/rds/rds.h
+++ b/net/rds/rds.h
@@ -59,7 +59,7 @@ struct rds_cong_map {
 	__be32			m_addr;
 	wait_queue_head_t	m_waitq;
 	struct list_head	m_conn_list;
-	unsigned long		m_page_addrs[RDS_CONG_MAP_PAGES];
+	void *			m_page_addrs[RDS_CONG_MAP_PAGES];
 };
 
 
@@ -676,7 +676,7 @@ rds_conn_connecting(struct rds_connection *conn)
 struct rds_message *rds_message_alloc(unsigned int nents, gfp_t gfp);
 struct scatterlist *rds_message_alloc_sgs(struct rds_message *rm, int nents);
 int rds_message_copy_from_user(struct rds_message *rm, struct iov_iter *from);
-struct rds_message *rds_message_map_pages(unsigned long *page_addrs, unsigned int total_len);
+struct rds_message *rds_message_map_pages(void **page_addrs, unsigned int total_len);
 void rds_message_populate_header(struct rds_header *hdr, __be16 sport,
 				 __be16 dport, u64 seq);
 int rds_message_add_extension(struct rds_header *hdr,
diff --git a/net/rds/tcp_recv.c b/net/rds/tcp_recv.c
index 27a9921..af75e1b 100644
--- a/net/rds/tcp_recv.c
+++ b/net/rds/tcp_recv.c
@@ -130,7 +130,7 @@ static void rds_tcp_cong_recv(struct rds_connection *conn,
 
 			/* only returns 0 or -error */
 			ret = skb_copy_bits(skb, skb_off,
-				(void *)map->m_page_addrs[map_page] + map_off,
+				map->m_page_addrs[map_page] + map_off,
 				to_copy);
 			BUG_ON(ret != 0);
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 14/83] proc_dev_atm_read(): get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (12 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 13/83] rds: keep pointers in ->m_page_addrs[] Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 15/83] qib get_map_page(): " Al Viro
                   ` (69 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 net/atm/proc.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/net/atm/proc.c b/net/atm/proc.c
index cf8993a..d04e11f 100644
--- a/net/atm/proc.c
+++ b/net/atm/proc.c
@@ -377,28 +377,28 @@ static ssize_t proc_dev_atm_read(struct file *file, char __user *buf,
 				 size_t count, loff_t *pos)
 {
 	struct atm_dev *dev;
-	unsigned long page;
+	char *page;
 	int length;
 
 	if (count == 0)
 		return 0;
-	page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	page = get_zeroed_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 	dev = PDE_DATA(file_inode(file));
 	if (!dev->ops->proc_read)
 		length = -EINVAL;
 	else {
-		length = dev->ops->proc_read(dev, pos, (char *)page);
+		length = dev->ops->proc_read(dev, pos, page);
 		if (length > count)
 			length = -EINVAL;
 	}
 	if (length >= 0) {
-		if (copy_to_user(buf, (char *)page, length))
+		if (copy_to_user(buf, page, length))
 			length = -EFAULT;
 		(*pos)++;
 	}
-	free_page((void *)page);
+	free_page(page);
 	return length;
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 15/83] qib get_map_page(): get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (13 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 14/83] proc_dev_atm_read(): get rid of pointless casts Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 16/83] user_namespace: " Al Viro
                   ` (68 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/infiniband/hw/qib/qib_qp.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/hw/qib/qib_qp.c b/drivers/infiniband/hw/qib/qib_qp.c
index 0daa083..f7c0908b 100644
--- a/drivers/infiniband/hw/qib/qib_qp.c
+++ b/drivers/infiniband/hw/qib/qib_qp.c
@@ -102,7 +102,7 @@ static u32 credit_table[31] = {
 
 static void get_map_page(struct qib_qpn_table *qpt, struct qpn_map *map)
 {
-	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	void *page = get_zeroed_page(GFP_KERNEL);
 
 	/*
 	 * Free the page if someone raced with us installing it.
@@ -110,9 +110,9 @@ static void get_map_page(struct qib_qpn_table *qpt, struct qpn_map *map)
 
 	spin_lock(&qpt->lock);
 	if (map->page)
-		free_page((void *)page);
+		free_page(page);
 	else
-		map->page = (void *)page;
+		map->page = page;
 	spin_unlock(&qpt->lock);
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 16/83] user_namespace: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (14 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 15/83] qib get_map_page(): " Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 17/83] ftrace: " Al Viro
                   ` (67 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 kernel/user_namespace.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
index b01948c..badce97 100644
--- a/kernel/user_namespace.c
+++ b/kernel/user_namespace.c
@@ -602,8 +602,7 @@ static ssize_t map_write(struct file *file, const char __user *buf,
 	struct uid_gid_map new_map;
 	unsigned idx;
 	struct uid_gid_extent *extent = NULL;
-	unsigned long page = 0;
-	char *kbuf, *pos, *next_line;
+	char *kbuf = NULL, *pos, *next_line;
 	ssize_t ret = -EINVAL;
 
 	/*
@@ -640,9 +639,8 @@ static ssize_t map_write(struct file *file, const char __user *buf,
 
 	/* Get a buffer */
 	ret = -ENOMEM;
-	page = __get_free_page(GFP_TEMPORARY);
-	kbuf = (char *) page;
-	if (!page)
+	kbuf = (char *)__get_free_page(GFP_TEMPORARY);
+	if (!kbuf)
 		goto out;
 
 	/* Only allow < page size writes at the beginning of the file */
@@ -756,8 +754,7 @@ static ssize_t map_write(struct file *file, const char __user *buf,
 	ret = count;
 out:
 	mutex_unlock(&userns_state_mutex);
-	if (page)
-		free_page((void *)page);
+	free_page(kbuf);
 	return ret;
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 17/83] ftrace: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (15 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 16/83] user_namespace: " Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 18/83] sysctl: " Al Viro
                   ` (66 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 kernel/trace/ftrace.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index b995e08..927cdd4 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -741,10 +741,10 @@ int ftrace_profile_pages_init(struct ftrace_profile_stat *stat)
  out_free:
 	pg = stat->start;
 	while (pg) {
-		unsigned long tmp = (unsigned long)pg;
+		void *tmp = pg;
 
 		pg = pg->next;
-		free_page((void *)tmp);
+		free_page(tmp);
 	}
 
 	stat->pages = NULL;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 18/83] sysctl: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (16 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 17/83] ftrace: " Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 19/83] xenstored_local_init(): " Al Viro
                   ` (65 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 kernel/sysctl.c | 31 ++++++++++++-------------------
 1 file changed, 12 insertions(+), 19 deletions(-)

diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 8e9cfe4..edb7da4 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -2047,9 +2047,8 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table,
 		  void *data)
 {
 	int *i, vleft, first = 1, err = 0;
-	unsigned long page = 0;
 	size_t left;
-	char *kbuf;
+	char *kbuf = NULL;
 	
 	if (!tbl_data || !table->maxlen || !*lenp || (*ppos && !write)) {
 		*lenp = 0;
@@ -2078,8 +2077,7 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table,
 
 		if (left > PAGE_SIZE - 1)
 			left = PAGE_SIZE - 1;
-		page = __get_free_page(GFP_TEMPORARY);
-		kbuf = (char *) page;
+		kbuf = (char *)__get_free_page(GFP_TEMPORARY);
 		if (!kbuf)
 			return -ENOMEM;
 		if (copy_from_user(kbuf, buffer, left)) {
@@ -2128,7 +2126,7 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table,
 		left -= proc_skip_spaces(&kbuf);
 free:
 	if (write) {
-		free_page((void *)page);
+		free_page(kbuf);
 		if (first)
 			return err ? : -EINVAL;
 	}
@@ -2310,9 +2308,8 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int
 {
 	unsigned long *i, *min, *max;
 	int vleft, first = 1, err = 0;
-	unsigned long page = 0;
 	size_t left;
-	char *kbuf;
+	char *kbuf = NULL;
 
 	if (!data || !table->maxlen || !*lenp || (*ppos && !write)) {
 		*lenp = 0;
@@ -2340,8 +2337,7 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int
 
 		if (left > PAGE_SIZE - 1)
 			left = PAGE_SIZE - 1;
-		page = __get_free_page(GFP_TEMPORARY);
-		kbuf = (char *) page;
+		kbuf = (char *)__get_free_page(GFP_TEMPORARY);
 		if (!kbuf)
 			return -ENOMEM;
 		if (copy_from_user(kbuf, buffer, left)) {
@@ -2388,7 +2384,7 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int
 		left -= proc_skip_spaces(&kbuf);
 free:
 	if (write) {
-		free_page((void *)page);
+		free_page(kbuf);
 		if (first)
 			return err ? : -EINVAL;
 	}
@@ -2650,18 +2646,15 @@ int proc_do_large_bitmap(struct ctl_table *table, int write,
 	}
 
 	if (write) {
-		unsigned long page = 0;
-		char *kbuf;
+		char *kbuf = (char *)__get_free_page(GFP_TEMPORARY);
+		if (!kbuf)
+			return -ENOMEM;
 
 		if (left > PAGE_SIZE - 1)
 			left = PAGE_SIZE - 1;
 
-		page = __get_free_page(GFP_TEMPORARY);
-		kbuf = (char *) page;
-		if (!kbuf)
-			return -ENOMEM;
 		if (copy_from_user(kbuf, buffer, left)) {
-			free_page((void *)page);
+			free_page(kbuf);
 			return -EFAULT;
                 }
 		kbuf[left] = 0;
@@ -2669,7 +2662,7 @@ int proc_do_large_bitmap(struct ctl_table *table, int write,
 		tmp_bitmap = kzalloc(BITS_TO_LONGS(bitmap_len) * sizeof(unsigned long),
 				     GFP_KERNEL);
 		if (!tmp_bitmap) {
-			free_page((void *)page);
+			free_page(kbuf);
 			return -ENOMEM;
 		}
 		proc_skip_char(&kbuf, &left, '\n');
@@ -2713,7 +2706,7 @@ int proc_do_large_bitmap(struct ctl_table *table, int write,
 			first = 0;
 			proc_skip_char(&kbuf, &left, '\n');
 		}
-		free_page((void *)page);
+		free_page(kbuf);
 	} else {
 		unsigned long bit_a, bit_b = 0;
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 19/83] xenstored_local_init(): get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (17 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 18/83] sysctl: " Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 20/83] staging/rdma: " Al Viro
                   ` (64 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/xen/xenbus/xenbus_probe.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
index 3e43b5a..d896283 100644
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -702,12 +702,12 @@ device_initcall(xenbus_probe_initcall);
  */
 static int __init xenstored_local_init(void)
 {
-	int err = 0;
-	unsigned long page = 0;
 	struct evtchn_alloc_unbound alloc_unbound;
+	void *page;
+	int err = 0;
 
 	/* Allocate Xenstore page */
-	page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	page = get_zeroed_page(GFP_KERNEL);
 	if (!page)
 		goto out_err;
 
@@ -729,8 +729,7 @@ static int __init xenstored_local_init(void)
 	return 0;
 
  out_err:
-	if (page != 0)
-		free_page((void *)page);
+	free_page(page);
 	return err;
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 20/83] staging/rdma: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (18 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 19/83] xenstored_local_init(): " Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 21/83] c6x: remove unused macros Al Viro
                   ` (63 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/staging/rdma/ehca/ehca_pd.c   | 2 +-
 drivers/staging/rdma/ehca/ipz_pt_fn.c | 6 +++---
 drivers/staging/rdma/ehca/ipz_pt_fn.h | 2 +-
 drivers/staging/rdma/hfi1/qp.c        | 6 +++---
 drivers/staging/rdma/ipath/ipath_qp.c | 6 +++---
 5 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/rdma/ehca/ehca_pd.c b/drivers/staging/rdma/ehca/ehca_pd.c
index c3424f4..351577a 100644
--- a/drivers/staging/rdma/ehca/ehca_pd.c
+++ b/drivers/staging/rdma/ehca/ehca_pd.c
@@ -92,7 +92,7 @@ int ehca_dealloc_pd(struct ib_pd *pd)
 		list_splice(&my_pd->full[i], &my_pd->free[i]);
 		list_for_each_entry_safe(page, tmp, &my_pd->free[i], list) {
 			leftovers = 1;
-			free_page((void *)page->page);
+			free_page(page->page);
 			kmem_cache_free(small_qp_cache, page);
 		}
 	}
diff --git a/drivers/staging/rdma/ehca/ipz_pt_fn.c b/drivers/staging/rdma/ehca/ipz_pt_fn.c
index 267df34..94deabc 100644
--- a/drivers/staging/rdma/ehca/ipz_pt_fn.c
+++ b/drivers/staging/rdma/ehca/ipz_pt_fn.c
@@ -140,7 +140,7 @@ static int alloc_small_queue_page(struct ipz_queue *queue, struct ehca_pd *pd)
 		if (!page)
 			goto out;
 
-		page->page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+		page->page = get_zeroed_page(GFP_KERNEL);
 		if (!page->page) {
 			kmem_cache_free(small_qp_cache, page);
 			goto out;
@@ -158,7 +158,7 @@ static int alloc_small_queue_page(struct ipz_queue *queue, struct ehca_pd *pd)
 
 	mutex_unlock(&pd->lock);
 
-	queue->queue_pages[0] = (void *)(page->page | (bit << (order + 9)));
+	queue->queue_pages[0] = page->page + (bit << (order + 9));
 	queue->small_page = page;
 	queue->offset = bit << (order + 9);
 	return 1;
@@ -196,7 +196,7 @@ static void free_small_queue_page(struct ipz_queue *queue, struct ehca_pd *pd)
 	mutex_unlock(&pd->lock);
 
 	if (free_page) {
-		free_page((void *)page->page);
+		free_page(page->page);
 		kmem_cache_free(small_qp_cache, page);
 	}
 }
diff --git a/drivers/staging/rdma/ehca/ipz_pt_fn.h b/drivers/staging/rdma/ehca/ipz_pt_fn.h
index a801274..e695ed2 100644
--- a/drivers/staging/rdma/ehca/ipz_pt_fn.h
+++ b/drivers/staging/rdma/ehca/ipz_pt_fn.h
@@ -64,7 +64,7 @@ struct ipz_page {
 #define IPZ_SPAGE_PER_KPAGE (PAGE_SIZE / 512)
 
 struct ipz_small_queue_page {
-	unsigned long page;
+	void *page;
 	unsigned long bitmap[IPZ_SPAGE_PER_KPAGE / BITS_PER_LONG];
 	int fill;
 	void *mapped_addr;
diff --git a/drivers/staging/rdma/hfi1/qp.c b/drivers/staging/rdma/hfi1/qp.c
index 4445610..701249d 100644
--- a/drivers/staging/rdma/hfi1/qp.c
+++ b/drivers/staging/rdma/hfi1/qp.c
@@ -120,7 +120,7 @@ static const u16 credit_table[31] = {
 
 static void get_map_page(struct hfi1_qpn_table *qpt, struct qpn_map *map)
 {
-	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	void *page = get_zeroed_page(GFP_KERNEL);
 
 	/*
 	 * Free the page if someone raced with us installing it.
@@ -128,9 +128,9 @@ static void get_map_page(struct hfi1_qpn_table *qpt, struct qpn_map *map)
 
 	spin_lock(&qpt->lock);
 	if (map->page)
-		free_page((void *)page);
+		free_page(page);
 	else
-		map->page = (void *)page;
+		map->page = page;
 	spin_unlock(&qpt->lock);
 }
 
diff --git a/drivers/staging/rdma/ipath/ipath_qp.c b/drivers/staging/rdma/ipath/ipath_qp.c
index 51fa380..b4ed2ef 100644
--- a/drivers/staging/rdma/ipath/ipath_qp.c
+++ b/drivers/staging/rdma/ipath/ipath_qp.c
@@ -85,7 +85,7 @@ static u32 credit_table[31] = {
 
 static void get_map_page(struct ipath_qp_table *qpt, struct qpn_map *map)
 {
-	unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	void *page = get_zeroed_page(GFP_KERNEL);
 	unsigned long flags;
 
 	/*
@@ -94,9 +94,9 @@ static void get_map_page(struct ipath_qp_table *qpt, struct qpn_map *map)
 
 	spin_lock_irqsave(&qpt->lock, flags);
 	if (map->page)
-		free_page((void *)page);
+		free_page(page);
 	else
-		map->page = (void *)page;
+		map->page = page;
 	spin_unlock_irqrestore(&qpt->lock, flags);
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 21/83] c6x: remove unused macros
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (19 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 20/83] staging/rdma: " Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 22/83] [davinci] ccdc_update_raw_params() frees the wrong thing Al Viro
                   ` (62 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/c6x/include/asm/processor.h | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/arch/c6x/include/asm/processor.h b/arch/c6x/include/asm/processor.h
index b5b5a87..22f07a4 100644
--- a/arch/c6x/include/asm/processor.h
+++ b/arch/c6x/include/asm/processor.h
@@ -77,10 +77,6 @@ struct thread_struct {
 #define task_pt_regs(task) \
 	((struct pt_regs *)(THREAD_START_SP + task_stack_page(task)) - 1)
 
-#define alloc_kernel_stack()	__get_free_page(GFP_KERNEL)
-#define free_kernel_stack(page) free_page((void *)(page))
-
-
 /* Forward declaration, a strange C thing */
 struct task_struct;
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 22/83] [davinci] ccdc_update_raw_params() frees the wrong thing
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (20 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 21/83] c6x: remove unused macros Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 23/83] fd_dma_mem_free(): pass address as void * instead of unsigned long Al Viro
                   ` (61 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

	Passing a physical address to free_pages() is a bad idea.
config_params->fault_pxl.fpc_table_addr is set to virt_to_phys()
of __get_free_pages() return value; what we should pass to free_pages()
is its phys_to_virt().  ccdc_close() does that properly, but
ccdc_update_raw_params() doesn't.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/media/platform/davinci/dm644x_ccdc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/davinci/dm644x_ccdc.c b/drivers/media/platform/davinci/dm644x_ccdc.c
index 31d4015..42df06f 100644
--- a/drivers/media/platform/davinci/dm644x_ccdc.c
+++ b/drivers/media/platform/davinci/dm644x_ccdc.c
@@ -261,7 +261,7 @@ static int ccdc_update_raw_params(struct ccdc_config_params_raw *raw_params)
 	 */
 	if (raw_params->fault_pxl.fp_num != config_params->fault_pxl.fp_num) {
 		if (fpc_physaddr != NULL) {
-			free_pages(fpc_physaddr,
+			free_pages(fpc_virtaddr,
 				   get_order
 				   (config_params->fault_pxl.fp_num *
 				   FP_NUM_BYTES));
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 23/83] fd_dma_mem_free(): pass address as void * instead of unsigned long
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (21 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 22/83] [davinci] ccdc_update_raw_params() frees the wrong thing Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 24/83] ppc: keep ->hpt_virt as a pointer Al Viro
                   ` (60 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/m68k/include/asm/floppy.h              |  4 ++--
 arch/mips/include/asm/mach-generic/floppy.h |  4 ++--
 arch/mips/include/asm/mach-jazz/floppy.h    |  6 +++---
 arch/parisc/include/asm/floppy.h            |  6 +++---
 arch/sparc/include/asm/floppy_32.h          |  2 +-
 arch/x86/include/asm/floppy.h               |  6 +++---
 drivers/block/floppy.c                      | 10 +++++-----
 7 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/arch/m68k/include/asm/floppy.h b/arch/m68k/include/asm/floppy.h
index 47365b1..b5fb689 100644
--- a/arch/m68k/include/asm/floppy.h
+++ b/arch/m68k/include/asm/floppy.h
@@ -147,9 +147,9 @@ static unsigned long vdma_mem_alloc(unsigned long size)
 
 }
 
-static void _fd_dma_mem_free(unsigned long addr, unsigned long size)
+static void _fd_dma_mem_free(void *addr, unsigned long size)
 {
-        vfree((void *)addr);
+        vfree(addr);
 }
 #define fd_dma_mem_free(addr,size) _fd_dma_mem_free(addr, size)
 
diff --git a/arch/mips/include/asm/mach-generic/floppy.h b/arch/mips/include/asm/mach-generic/floppy.h
index 7b0b508..1419f0d 100644
--- a/arch/mips/include/asm/mach-generic/floppy.h
+++ b/arch/mips/include/asm/mach-generic/floppy.h
@@ -122,9 +122,9 @@ static inline unsigned long fd_dma_mem_alloc(unsigned long size)
 	return mem;
 }
 
-static inline void fd_dma_mem_free(unsigned long addr, unsigned long size)
+static inline void fd_dma_mem_free(void *addr, unsigned long size)
 {
-	free_pages((void *)addr, get_order(size));
+	free_pages(addr, get_order(size));
 }
 
 static inline unsigned long fd_drive_type(unsigned long n)
diff --git a/arch/mips/include/asm/mach-jazz/floppy.h b/arch/mips/include/asm/mach-jazz/floppy.h
index 4aaf35b..701dbfc 100644
--- a/arch/mips/include/asm/mach-jazz/floppy.h
+++ b/arch/mips/include/asm/mach-jazz/floppy.h
@@ -114,10 +114,10 @@ static inline unsigned long fd_dma_mem_alloc(unsigned long size)
 	return mem;
 }
 
-static inline void fd_dma_mem_free(unsigned long addr, unsigned long size)
+static inline void fd_dma_mem_free(void *addr, unsigned long size)
 {
-	vdma_free(vdma_phys2log(CPHYSADDR(addr)));
-	free_pages((void *)addr, get_order(size));
+	vdma_free(vdma_phys2log(CPHYSADDR((unsigned long)addr)));
+	free_pages(addr, get_order(size));
 }
 
 static inline unsigned long fd_drive_type(unsigned long n)
diff --git a/arch/parisc/include/asm/floppy.h b/arch/parisc/include/asm/floppy.h
index ce08762..21ea40c 100644
--- a/arch/parisc/include/asm/floppy.h
+++ b/arch/parisc/include/asm/floppy.h
@@ -177,12 +177,12 @@ static unsigned long vdma_mem_alloc(unsigned long size)
 
 #define nodma_mem_alloc(size) vdma_mem_alloc(size)
 
-static void _fd_dma_mem_free(unsigned long addr, unsigned long size)
+static void _fd_dma_mem_free(void *addr, unsigned long size)
 {
 	if((unsigned int) addr >= (unsigned int) high_memory)
-		return vfree((void *)addr);
+		return vfree(addr);
 	else
-		free_pages((void *)addr, get_order(size));		
+		free_pages(addr, get_order(size));		
 }
 
 #define fd_dma_mem_free(addr, size)  _fd_dma_mem_free(addr, size) 
diff --git a/arch/sparc/include/asm/floppy_32.h b/arch/sparc/include/asm/floppy_32.h
index 071b83e..dd7aa7c 100644
--- a/arch/sparc/include/asm/floppy_32.h
+++ b/arch/sparc/include/asm/floppy_32.h
@@ -75,7 +75,7 @@ static struct sun_floppy_ops sun_fdops;
 #define fd_free_irq()             /* nothing... */
 #if 0  /* P3: added by Alain, these cause a MMU corruption. 19960524 XXX */
 #define fd_dma_mem_alloc(size)    ((unsigned long) vmalloc(size))
-#define fd_dma_mem_free(addr,size) (vfree((void *)(addr)))
+#define fd_dma_mem_free(addr,size) (vfree((addr)))
 #endif
 
 /* XXX This isn't really correct. XXX */
diff --git a/arch/x86/include/asm/floppy.h b/arch/x86/include/asm/floppy.h
index 8203e1d..31718b2 100644
--- a/arch/x86/include/asm/floppy.h
+++ b/arch/x86/include/asm/floppy.h
@@ -165,12 +165,12 @@ static unsigned long vdma_mem_alloc(unsigned long size)
 
 #define nodma_mem_alloc(size) vdma_mem_alloc(size)
 
-static void _fd_dma_mem_free(unsigned long addr, unsigned long size)
+static void _fd_dma_mem_free(void *addr, unsigned long size)
 {
 	if ((unsigned long)addr >= (unsigned long)high_memory)
-		vfree((void *)addr);
+		vfree(addr);
 	else
-		free_pages((void *)addr, get_order(size));
+		free_pages(addr, get_order(size));
 }
 
 #define fd_dma_mem_free(addr, size)  _fd_dma_mem_free(addr, size)
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index e2738be..9f36da8 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -267,7 +267,7 @@ static int set_next_request(void);
 /* Dma Memory related stuff */
 
 #ifndef fd_dma_mem_free
-#define fd_dma_mem_free(addr, size) free_pages((void *)addr, get_order(size))
+#define fd_dma_mem_free(addr, size) free_pages(addr, get_order(size))
 #endif
 
 #ifndef fd_dma_mem_alloc
@@ -3099,7 +3099,7 @@ static void raw_cmd_free(struct floppy_raw_cmd **ptr)
 	*ptr = NULL;
 	while (this) {
 		if (this->buffer_length) {
-			fd_dma_mem_free((unsigned long)this->kernel_data,
+			fd_dma_mem_free(this->kernel_data,
 					this->buffer_length);
 			this->buffer_length = 0;
 		}
@@ -3686,7 +3686,7 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)
 		}
 		if (floppy_track_buffer) {
 			if (tmp)
-				fd_dma_mem_free((unsigned long)tmp, try * 1024);
+				fd_dma_mem_free(tmp, try * 1024);
 		} else {
 			buffer_min = buffer_max = -1;
 			floppy_track_buffer = tmp;
@@ -4508,7 +4508,7 @@ static void floppy_release_irq_and_dma(void)
 	int drive;
 #endif
 	long tmpsize;
-	unsigned long tmpaddr;
+	void *tmpaddr;
 
 	if (!atomic_dec_and_test(&usage_count))
 		return;
@@ -4526,7 +4526,7 @@ static void floppy_release_irq_and_dma(void)
 
 	if (floppy_track_buffer && max_buffer_sectors) {
 		tmpsize = max_buffer_sectors * 1024;
-		tmpaddr = (unsigned long)floppy_track_buffer;
+		tmpaddr = floppy_track_buffer;
 		floppy_track_buffer = NULL;
 		max_buffer_sectors = 0;
 		buffer_min = buffer_max = -1;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 24/83] ppc: keep ->hpt_virt as a pointer
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (22 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 23/83] fd_dma_mem_free(): pass address as void * instead of unsigned long Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 25/83] dma_4u_alloc_coherent(): don't mix virtual and physical addresses Al Viro
                   ` (59 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/powerpc/include/asm/kvm_host.h |  2 +-
 arch/powerpc/kvm/book3s_64_mmu_hv.c | 19 ++++++++++---------
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h
index cfa758c..224d71e 100644
--- a/arch/powerpc/include/asm/kvm_host.h
+++ b/arch/powerpc/include/asm/kvm_host.h
@@ -223,7 +223,7 @@ struct kvm_arch_memory_slot {
 struct kvm_arch {
 	unsigned int lpid;
 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
-	unsigned long hpt_virt;
+	void *hpt_virt;
 	struct revmap_entry *revmap;
 	unsigned int host_lpid;
 	unsigned long host_lpcr;
diff --git a/arch/powerpc/kvm/book3s_64_mmu_hv.c b/arch/powerpc/kvm/book3s_64_mmu_hv.c
index e398fdc..3dd6f8e 100644
--- a/arch/powerpc/kvm/book3s_64_mmu_hv.c
+++ b/arch/powerpc/kvm/book3s_64_mmu_hv.c
@@ -50,7 +50,7 @@ static void kvmppc_rmap_reset(struct kvm *kvm);
 
 long kvmppc_alloc_hpt(struct kvm *kvm, u32 *htab_orderp)
 {
-	unsigned long hpt = 0;
+	void *hpt = NULL;
 	struct revmap_entry *rev;
 	struct page *page = NULL;
 	long order = KVM_DEFAULT_HPT_ORDER;
@@ -64,16 +64,17 @@ long kvmppc_alloc_hpt(struct kvm *kvm, u32 *htab_orderp)
 	kvm->arch.hpt_cma_alloc = 0;
 	page = kvm_alloc_hpt(1ul << (order - PAGE_SHIFT));
 	if (page) {
-		hpt = (unsigned long)pfn_to_kaddr(page_to_pfn(page));
-		memset((void *)hpt, 0, (1ul << order));
+		hpt = pfn_to_kaddr(page_to_pfn(page));
+		memset(hpt, 0, (1ul << order));
 		kvm->arch.hpt_cma_alloc = 1;
 	}
 
 	/* Lastly try successively smaller sizes from the page allocator */
 	/* Only do this if userspace didn't specify a size via ioctl */
 	while (!hpt && order > PPC_MIN_HPT_ORDER && !htab_orderp) {
-		hpt = __get_free_pages(GFP_KERNEL|__GFP_ZERO|__GFP_REPEAT|
-				       __GFP_NOWARN, order - PAGE_SHIFT);
+		hpt = (void *)__get_free_pages(GFP_KERNEL|__GFP_ZERO|
+					__GFP_REPEAT| __GFP_NOWARN,
+					order - PAGE_SHIFT);
 		if (!hpt)
 			--order;
 	}
@@ -97,7 +98,7 @@ long kvmppc_alloc_hpt(struct kvm *kvm, u32 *htab_orderp)
 	kvm->arch.revmap = rev;
 	kvm->arch.sdr1 = __pa(hpt) | (order - 18);
 
-	pr_info("KVM guest htab at %lx (order %ld), LPID %x\n",
+	pr_info("KVM guest htab at %p (order %ld), LPID %x\n",
 		hpt, order, kvm->arch.lpid);
 
 	if (htab_orderp)
@@ -108,7 +109,7 @@ long kvmppc_alloc_hpt(struct kvm *kvm, u32 *htab_orderp)
 	if (kvm->arch.hpt_cma_alloc)
 		kvm_release_hpt(page, 1 << (order - PAGE_SHIFT));
 	else
-		free_pages((void *)hpt, order - PAGE_SHIFT);
+		free_pages(hpt, order - PAGE_SHIFT);
 	return -ENOMEM;
 }
 
@@ -130,7 +131,7 @@ long kvmppc_alloc_reset_hpt(struct kvm *kvm, u32 *htab_orderp)
 	if (kvm->arch.hpt_virt) {
 		order = kvm->arch.hpt_order;
 		/* Set the entire HPT to 0, i.e. invalid HPTEs */
-		memset((void *)kvm->arch.hpt_virt, 0, 1ul << order);
+		memset(kvm->arch.hpt_virt, 0, 1ul << order);
 		/*
 		 * Reset all the reverse-mapping chains for all memslots
 		 */
@@ -156,7 +157,7 @@ void kvmppc_free_hpt(struct kvm *kvm)
 		kvm_release_hpt(virt_to_page(kvm->arch.hpt_virt),
 				1 << (kvm->arch.hpt_order - PAGE_SHIFT));
 	else
-		free_pages((void *)kvm->arch.hpt_virt,
+		free_pages(kvm->arch.hpt_virt,
 			   kvm->arch.hpt_order - PAGE_SHIFT);
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 25/83] dma_4u_alloc_coherent(): don't mix virtual and physical addresses
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (23 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 24/83] ppc: keep ->hpt_virt as a pointer Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:46 ` [POC][PATCH 26/83] dma_4v_alloc_coherent(): " Al Viro
                   ` (58 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/sparc/kernel/iommu.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c
index eae7b6b..18a40c6 100644
--- a/arch/sparc/kernel/iommu.c
+++ b/arch/sparc/kernel/iommu.c
@@ -215,23 +215,22 @@ static void *dma_4u_alloc_coherent(struct device *dev, size_t size,
 	if (unlikely(!page))
 		return NULL;
 
-	first_page = (unsigned long) page_address(page);
-	memset((char *)first_page, 0, PAGE_SIZE << order);
+	ret =  page_address(page);
+	memset(ret, 0, PAGE_SIZE << order);
 
 	iommu = dev->archdata.iommu;
 
 	iopte = alloc_npages(dev, iommu, size >> IO_PAGE_SHIFT);
 
 	if (unlikely(iopte == NULL)) {
-		free_pages((void *)first_page, order);
+		free_pages(ret, order);
 		return NULL;
 	}
 
 	*dma_addrp = (iommu->tbl.table_map_base +
 		      ((iopte - iommu->page_table) << IO_PAGE_SHIFT));
-	ret = (void *) first_page;
 	npages = size >> IO_PAGE_SHIFT;
-	first_page = __pa(first_page);
+	first_page = __pa(ret);
 	while (npages--) {
 		iopte_val(*iopte) = (IOPTE_CONSISTENT(0UL) |
 				     IOPTE_WRITE |
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 26/83] dma_4v_alloc_coherent(): don't mix virtual and physical addresses
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (24 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 25/83] dma_4u_alloc_coherent(): don't mix virtual and physical addresses Al Viro
@ 2015-12-21 23:46 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 27/83] new helper: get_dma_pages() Al Viro
                   ` (57 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/sparc/kernel/pci_sun4v.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c
index 3eb8907..3ea1937 100644
--- a/arch/sparc/kernel/pci_sun4v.c
+++ b/arch/sparc/kernel/pci_sun4v.c
@@ -151,8 +151,8 @@ static void *dma_4v_alloc_coherent(struct device *dev, size_t size,
 	if (unlikely(!page))
 		return NULL;
 
-	first_page = (unsigned long) page_address(page);
-	memset((char *)first_page, 0, PAGE_SIZE << order);
+	ret =  page_address(page);
+	memset(ret, 0, PAGE_SIZE << order);
 
 	iommu = dev->archdata.iommu;
 
@@ -163,8 +163,7 @@ static void *dma_4v_alloc_coherent(struct device *dev, size_t size,
 		goto range_alloc_fail;
 
 	*dma_addrp = (iommu->tbl.table_map_base + (entry << IO_PAGE_SHIFT));
-	ret = (void *) first_page;
-	first_page = __pa(first_page);
+	first_page = __pa(ret);
 
 	local_irq_save(flags);
 
@@ -190,7 +189,7 @@ iommu_map_fail:
 	iommu_tbl_range_free(&iommu->tbl, *dma_addrp, npages, IOMMU_ERROR_CODE);
 
 range_alloc_fail:
-	free_pages((void *)first_page, order);
+	free_pages(ret, order);
 	return NULL;
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 27/83] new helper: get_dma_pages()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (25 preceding siblings ...)
  2015-12-21 23:46 ` [POC][PATCH 26/83] dma_4v_alloc_coherent(): " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 28/83] make fd_dma_mem_alloc/nodma_mem_alloc return a pointer Al Viro
                   ` (56 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

same as __get_dma_pages(), except that it returns a pointer

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 include/linux/gfp.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index f4304c1..07b714d 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -486,6 +486,9 @@ void * __meminit alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask);
 #define __get_dma_pages(gfp_mask, order) \
 		__get_free_pages((gfp_mask) | GFP_DMA, (order))
 
+#define get_dma_pages(gfp_mask, order) \
+		((void *)__get_free_pages((gfp_mask) | GFP_DMA, (order)))
+
 extern void __free_pages(struct page *page, unsigned int order);
 extern void free_pages(const void *addr, unsigned int order);
 extern void free_hot_cold_page(struct page *page, bool cold);
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 28/83] make fd_dma_mem_alloc/nodma_mem_alloc return a pointer
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (26 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 27/83] new helper: get_dma_pages() Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 29/83] switch the remaining users of __get_dma_pages() to get_dma_pages() Al Viro
                   ` (55 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/m68k/include/asm/floppy.h              |  4 ++--
 arch/mips/include/asm/mach-generic/floppy.h |  8 ++------
 arch/mips/include/asm/mach-jazz/floppy.h    | 10 ++++------
 arch/parisc/include/asm/floppy.h            | 15 +++++----------
 arch/sparc/include/asm/floppy_32.h          |  2 +-
 arch/x86/include/asm/floppy.h               | 15 +++++----------
 drivers/block/floppy.c                      | 10 +++++-----
 7 files changed, 24 insertions(+), 40 deletions(-)

diff --git a/arch/m68k/include/asm/floppy.h b/arch/m68k/include/asm/floppy.h
index b5fb689..44f85da 100644
--- a/arch/m68k/include/asm/floppy.h
+++ b/arch/m68k/include/asm/floppy.h
@@ -141,9 +141,9 @@ static int vdma_get_dma_residue(unsigned int dummy)
 }
 
 
-static unsigned long vdma_mem_alloc(unsigned long size)
+static void *vdma_mem_alloc(unsigned long size)
 {
-	return (unsigned long) vmalloc(size);
+	return vmalloc(size);
 
 }
 
diff --git a/arch/mips/include/asm/mach-generic/floppy.h b/arch/mips/include/asm/mach-generic/floppy.h
index 1419f0d..5b4087f 100644
--- a/arch/mips/include/asm/mach-generic/floppy.h
+++ b/arch/mips/include/asm/mach-generic/floppy.h
@@ -113,13 +113,9 @@ static inline unsigned long fd_getfdaddr1(void)
 	return 0x3f0;
 }
 
-static inline unsigned long fd_dma_mem_alloc(unsigned long size)
+static inline void *fd_dma_mem_alloc(unsigned long size)
 {
-	unsigned long mem;
-
-	mem = __get_dma_pages(GFP_KERNEL, get_order(size));
-
-	return mem;
+	return get_dma_pages(GFP_KERNEL, get_order(size));
 }
 
 static inline void fd_dma_mem_free(void *addr, unsigned long size)
diff --git a/arch/mips/include/asm/mach-jazz/floppy.h b/arch/mips/include/asm/mach-jazz/floppy.h
index 701dbfc..8aa7b85 100644
--- a/arch/mips/include/asm/mach-jazz/floppy.h
+++ b/arch/mips/include/asm/mach-jazz/floppy.h
@@ -102,14 +102,12 @@ static inline unsigned long fd_getfdaddr1(void)
 	return JAZZ_FDC_BASE;
 }
 
-static inline unsigned long fd_dma_mem_alloc(unsigned long size)
+static inline void *fd_dma_mem_alloc(unsigned long size)
 {
-	unsigned long mem;
+	void *mem = get_dma_pages(GFP_KERNEL, get_order(size));
 
-	mem = __get_dma_pages(GFP_KERNEL, get_order(size));
-	if(!mem)
-		return 0;
-	vdma_alloc(CPHYSADDR(mem), size);	/* XXX error checking */
+	if (mem)	/* XXX error checking */
+		vdma_alloc(CPHYSADDR((unsigned long)mem), size);
 
 	return mem;
 }
diff --git a/arch/parisc/include/asm/floppy.h b/arch/parisc/include/asm/floppy.h
index 21ea40c..92bb8c8 100644
--- a/arch/parisc/include/asm/floppy.h
+++ b/arch/parisc/include/asm/floppy.h
@@ -163,19 +163,14 @@ static int fd_request_irq(void)
 				   0, "floppy", NULL);
 }
 
-static unsigned long dma_mem_alloc(unsigned long size)
+static void *dma_mem_alloc(unsigned long size)
 {
-	return __get_dma_pages(GFP_KERNEL, get_order(size));
+	return get_dma_pages(GFP_KERNEL, get_order(size));
 }
 
 
-static unsigned long vdma_mem_alloc(unsigned long size)
-{
-	return (unsigned long) vmalloc(size);
-
-}
-
-#define nodma_mem_alloc(size) vdma_mem_alloc(size)
+#define vdma_mem_alloc vmalloc
+#define nodma_mem_alloc vmalloc
 
 static void _fd_dma_mem_free(void *addr, unsigned long size)
 {
@@ -237,7 +232,7 @@ static struct fd_routine_l {
 	int (*_request_dma)(unsigned int dmanr, const char * device_id);
 	void (*_free_dma)(unsigned int dmanr);
 	int (*_get_dma_residue)(unsigned int dummy);
-	unsigned long (*_dma_mem_alloc) (unsigned long size);
+	void *(*_dma_mem_alloc) (unsigned long size);
 	int (*_dma_setup)(char *addr, unsigned long size, int mode, int io);
 } fd_routine[] = {
 	{
diff --git a/arch/sparc/include/asm/floppy_32.h b/arch/sparc/include/asm/floppy_32.h
index dd7aa7c..6e33911 100644
--- a/arch/sparc/include/asm/floppy_32.h
+++ b/arch/sparc/include/asm/floppy_32.h
@@ -74,7 +74,7 @@ static struct sun_floppy_ops sun_fdops;
 #define fd_request_irq()          sun_fd_request_irq()
 #define fd_free_irq()             /* nothing... */
 #if 0  /* P3: added by Alain, these cause a MMU corruption. 19960524 XXX */
-#define fd_dma_mem_alloc(size)    ((unsigned long) vmalloc(size))
+#define fd_dma_mem_alloc(size)    (vmalloc(size))
 #define fd_dma_mem_free(addr,size) (vfree((addr)))
 #endif
 
diff --git a/arch/x86/include/asm/floppy.h b/arch/x86/include/asm/floppy.h
index 31718b2..1ace831 100644
--- a/arch/x86/include/asm/floppy.h
+++ b/arch/x86/include/asm/floppy.h
@@ -151,19 +151,14 @@ static int fd_request_irq(void)
 				   0, "floppy", NULL);
 }
 
-static unsigned long dma_mem_alloc(unsigned long size)
+static void *dma_mem_alloc(unsigned long size)
 {
-	return __get_dma_pages(GFP_KERNEL|__GFP_NORETRY, get_order(size));
+	return get_dma_pages(GFP_KERNEL|__GFP_NORETRY, get_order(size));
 }
 
 
-static unsigned long vdma_mem_alloc(unsigned long size)
-{
-	return (unsigned long)vmalloc(size);
-
-}
-
-#define nodma_mem_alloc(size) vdma_mem_alloc(size)
+#define vdma_mem_alloc vmalloc
+#define nodma_mem_alloc vmalloc
 
 static void _fd_dma_mem_free(void *addr, unsigned long size)
 {
@@ -225,7 +220,7 @@ static struct fd_routine_l {
 	int (*_request_dma)(unsigned int dmanr, const char *device_id);
 	void (*_free_dma)(unsigned int dmanr);
 	int (*_get_dma_residue)(unsigned int dummy);
-	unsigned long (*_dma_mem_alloc)(unsigned long size);
+	void *(*_dma_mem_alloc)(unsigned long size);
 	int (*_dma_setup)(char *addr, unsigned long size, int mode, int io);
 } fd_routine[] = {
 	{
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index 9f36da8..e15ab8f 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -271,7 +271,7 @@ static int set_next_request(void);
 #endif
 
 #ifndef fd_dma_mem_alloc
-#define fd_dma_mem_alloc(size) __get_dma_pages(GFP_KERNEL, get_order(size))
+#define fd_dma_mem_alloc(size) get_dma_pages(GFP_KERNEL, get_order(size))
 #endif
 
 static inline void fallback_on_nodma_alloc(char **addr, size_t l)
@@ -282,7 +282,7 @@ static inline void fallback_on_nodma_alloc(char **addr, size_t l)
 	if (can_use_virtual_dma != 2)
 		return;		/* no fallback allowed */
 	pr_info("DMA memory shortage. Temporarily falling back on virtual DMA\n");
-	*addr = (char *)nodma_mem_alloc(l);
+	*addr = nodma_mem_alloc(l);
 #else
 	return;
 #endif
@@ -3148,7 +3148,7 @@ loop:
 	if (ptr->flags & (FD_RAW_READ | FD_RAW_WRITE)) {
 		if (ptr->length <= 0)
 			return -EINVAL;
-		ptr->kernel_data = (char *)fd_dma_mem_alloc(ptr->length);
+		ptr->kernel_data = fd_dma_mem_alloc(ptr->length);
 		fallback_on_nodma_alloc(&ptr->kernel_data, ptr->length);
 		if (!ptr->kernel_data)
 			return -ENOMEM;
@@ -3672,11 +3672,11 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)
 		else
 			try = 32;	/* Only 24 actually useful */
 
-		tmp = (char *)fd_dma_mem_alloc(1024 * try);
+		tmp = fd_dma_mem_alloc(1024 * try);
 		if (!tmp && !floppy_track_buffer) {
 			try >>= 1;	/* buffer only one side */
 			INFBOUND(try, 16);
-			tmp = (char *)fd_dma_mem_alloc(1024 * try);
+			tmp = fd_dma_mem_alloc(1024 * try);
 		}
 		if (!tmp && !floppy_track_buffer)
 			fallback_on_nodma_alloc(&tmp, 2048 * try);
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 29/83] switch the remaining users of __get_dma_pages() to get_dma_pages()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (27 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 28/83] make fd_dma_mem_alloc/nodma_mem_alloc return a pointer Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 30/83] sparc: get rid of pointless casts Al Viro
                   ` (54 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/char/mbcs.c                  | 24 ++++++++++++------------
 drivers/net/appletalk/ltpc.c         |  8 +++-----
 drivers/net/ethernet/amd/mvme147.c   |  8 ++++----
 drivers/net/ethernet/cirrus/cs89x0.c |  3 +--
 include/linux/gfp.h                  |  3 ---
 5 files changed, 20 insertions(+), 26 deletions(-)

diff --git a/drivers/char/mbcs.c b/drivers/char/mbcs.c
index b9d9619..eddf892 100644
--- a/drivers/char/mbcs.c
+++ b/drivers/char/mbcs.c
@@ -404,22 +404,22 @@ static ssize_t mbcs_sram_read(struct file * fp, char __user *buf, size_t len, lo
 {
 	struct cx_dev *cx_dev = fp->private_data;
 	struct mbcs_soft *soft = cx_dev->soft;
-	uint64_t hostAddr;
+	void *hostAddr;
 	int rv = 0;
 
-	hostAddr = __get_dma_pages(GFP_KERNEL, get_order(len));
-	if (hostAddr == 0)
+	hostAddr = get_dma_pages(GFP_KERNEL, get_order(len));
+	if (!hostAddr)
 		return -ENOMEM;
 
-	rv = do_mbcs_sram_dmawrite(soft, hostAddr, len, off);
+	rv = do_mbcs_sram_dmawrite(soft, (unsigned long)hostAddr, len, off);
 	if (rv < 0)
 		goto exit;
 
-	if (copy_to_user(buf, (void *)hostAddr, len))
+	if (copy_to_user(buf, hostAddr, len))
 		rv = -EFAULT;
 
       exit:
-	free_pages((void *)hostAddr, get_order(len));
+	free_pages(hostAddr, get_order(len));
 
 	return rv;
 }
@@ -429,22 +429,22 @@ mbcs_sram_write(struct file * fp, const char __user *buf, size_t len, loff_t * o
 {
 	struct cx_dev *cx_dev = fp->private_data;
 	struct mbcs_soft *soft = cx_dev->soft;
-	uint64_t hostAddr;
+	void *hostAddr;
 	int rv = 0;
 
-	hostAddr = __get_dma_pages(GFP_KERNEL, get_order(len));
-	if (hostAddr == 0)
+	hostAddr = get_dma_pages(GFP_KERNEL, get_order(len));
+	if (!hostAddr)
 		return -ENOMEM;
 
-	if (copy_from_user((void *)hostAddr, buf, len)) {
+	if (copy_from_user(hostAddr, buf, len)) {
 		rv = -EFAULT;
 		goto exit;
 	}
 
-	rv = do_mbcs_sram_dmaread(soft, hostAddr, len, off);
+	rv = do_mbcs_sram_dmaread(soft, (unsigned long)hostAddr, len, off);
 
       exit:
-	free_pages((void *)hostAddr, get_order(len));
+	free_pages(hostAddr, get_order(len));
 
 	return rv;
 }
diff --git a/drivers/net/appletalk/ltpc.c b/drivers/net/appletalk/ltpc.c
index c98dea0..daaffd7 100644
--- a/drivers/net/appletalk/ltpc.c
+++ b/drivers/net/appletalk/ltpc.c
@@ -245,11 +245,9 @@ static int sendup_buffer (struct net_device *dev);
 
 /* Dma Memory related stuff, cribbed directly from 3c505.c */
 
-static unsigned long dma_mem_alloc(int size)
+static void *dma_mem_alloc(int size)
 {
-        int order = get_order(size);
-
-        return __get_dma_pages(GFP_KERNEL, order);
+        return get_dma_pages(GFP_KERNEL, get_order(size));
 }
 
 /* DMA data buffer, DMA command buffer */
@@ -1075,7 +1073,7 @@ struct net_device * __init ltpc_probe(void)
 	}
 
 	/* allocate a DMA buffer */
-	ltdmabuf = (unsigned char *) dma_mem_alloc(1000);
+	ltdmabuf = dma_mem_alloc(1000);
 	if (!ltdmabuf) {
 		printk(KERN_ERR "ltpc: mem alloc failed\n");
 		err = -ENOMEM;
diff --git a/drivers/net/ethernet/amd/mvme147.c b/drivers/net/ethernet/amd/mvme147.c
index abda91c..b3487fb 100644
--- a/drivers/net/ethernet/amd/mvme147.c
+++ b/drivers/net/ethernet/amd/mvme147.c
@@ -38,7 +38,7 @@
 /* Our private data structure */
 struct m147lance_private {
 	struct lance_private lance;
-	unsigned long ram;
+	void *ram;
 };
 
 /* function prototypes... This is easy because all the grot is in the
@@ -111,7 +111,7 @@ struct net_device * __init mvme147lance_probe(int unit)
 	       dev->dev_addr);
 
 	lp = netdev_priv(dev);
-	lp->ram = __get_dma_pages(GFP_ATOMIC, 3);	/* 32K */
+	lp->ram = get_dma_pages(GFP_ATOMIC, 3);	/* 32K */
 	if (!lp->ram) {
 		printk("%s: No memory for LANCE buffers\n", dev->name);
 		free_netdev(dev);
@@ -134,7 +134,7 @@ struct net_device * __init mvme147lance_probe(int unit)
 
 	err = register_netdev(dev);
 	if (err) {
-		free_pages((void *)lp->ram, 3);
+		free_pages(lp->ram, 3);
 		free_netdev(dev);
 		return ERR_PTR(err);
 	}
@@ -193,7 +193,7 @@ void __exit cleanup_module(void)
 {
 	struct m147lance_private *lp = netdev_priv(dev_mvme147_lance);
 	unregister_netdev(dev_mvme147_lance);
-	free_pages((void *)lp->ram, 3);
+	free_pages(lp->ram, 3);
 	free_netdev(dev_mvme147_lance);
 }
 
diff --git a/drivers/net/ethernet/cirrus/cs89x0.c b/drivers/net/ethernet/cirrus/cs89x0.c
index 815c596..25e128f 100644
--- a/drivers/net/ethernet/cirrus/cs89x0.c
+++ b/drivers/net/ethernet/cirrus/cs89x0.c
@@ -883,8 +883,7 @@ net_open(struct net_device *dev)
 #if ALLOW_DMA
 	if (lp->use_dma && (lp->isa_config & ANY_ISA_DMA)) {
 		unsigned long flags;
-		lp->dma_buff = (unsigned char *)__get_dma_pages(GFP_KERNEL,
-								get_order(lp->dmasize * 1024));
+		lp->dma_buff = get_dma_pages(GFP_KERNEL, get_order(lp->dmasize * 1024));
 		if (!lp->dma_buff) {
 			pr_err("%s: cannot get %dK memory for DMA\n",
 			       dev->name, lp->dmasize);
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 07b714d..fc4529d 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -483,9 +483,6 @@ void * __meminit alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask);
 #define __get_free_page(gfp_mask) \
 		__get_free_pages((gfp_mask), 0)
 
-#define __get_dma_pages(gfp_mask, order) \
-		__get_free_pages((gfp_mask) | GFP_DMA, (order))
-
 #define get_dma_pages(gfp_mask, order) \
 		((void *)__get_free_pages((gfp_mask) | GFP_DMA, (order)))
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 30/83] sparc: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (28 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 29/83] switch the remaining users of __get_dma_pages() to get_dma_pages() Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 31/83] efficeon: " Al Viro
                   ` (53 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/sparc/include/asm/dma.h      |  2 +-
 arch/sparc/include/asm/iommu_64.h |  2 +-
 arch/sparc/kernel/iommu.c         |  8 ++++----
 arch/sparc/kernel/ioport.c        |  8 ++++----
 arch/sparc/kernel/irq_64.c        |  4 ++--
 arch/sparc/kernel/pci_fire.c      | 18 ++++++++----------
 arch/sparc/kernel/pci_sun4v.c     | 24 +++++++++++++-----------
 arch/sparc/mm/io-unit.c           |  9 ++++-----
 arch/sparc/mm/iommu.c             | 10 +++++-----
 9 files changed, 42 insertions(+), 43 deletions(-)

diff --git a/arch/sparc/include/asm/dma.h b/arch/sparc/include/asm/dma.h
index 3d434ef..9bf9f53 100644
--- a/arch/sparc/include/asm/dma.h
+++ b/arch/sparc/include/asm/dma.h
@@ -101,7 +101,7 @@ struct sparc32_dma_ops {
 	void (*release_scsi_one)(struct device *, __u32, unsigned long);
 	void (*release_scsi_sgl)(struct device *, struct scatterlist *,int);
 #ifdef CONFIG_SBUS
-	int (*map_dma_area)(struct device *, dma_addr_t *, unsigned long, unsigned long, int);
+	int (*map_dma_area)(struct device *, dma_addr_t *, void *, unsigned long, int);
 	void (*unmap_dma_area)(struct device *, unsigned long, int);
 #endif
 };
diff --git a/arch/sparc/include/asm/iommu_64.h b/arch/sparc/include/asm/iommu_64.h
index cd0d69f..e781f29 100644
--- a/arch/sparc/include/asm/iommu_64.h
+++ b/arch/sparc/include/asm/iommu_64.h
@@ -36,7 +36,7 @@ struct iommu {
 	unsigned long		iommu_tags;
 	unsigned long		iommu_ctxflush;
 	unsigned long		write_complete_reg;
-	unsigned long		dummy_page;
+	void			*dummy_page;
 	unsigned long		dummy_page_pa;
 	unsigned long		ctx_lowest_free;
 	DECLARE_BITMAP(ctx_bitmap, IOMMU_NUM_CTXS);
diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c
index 18a40c6..47c2822 100644
--- a/arch/sparc/kernel/iommu.c
+++ b/arch/sparc/kernel/iommu.c
@@ -124,8 +124,8 @@ int iommu_table_init(struct iommu *iommu, int tsbsize,
 		printk(KERN_ERR "IOMMU: Error, gfp(dummy_page) failed.\n");
 		goto out_free_map;
 	}
-	iommu->dummy_page = (unsigned long) page_address(page);
-	memset((void *)iommu->dummy_page, 0, PAGE_SIZE);
+	iommu->dummy_page = page_address(page);
+	memset(iommu->dummy_page, 0, PAGE_SIZE);
 	iommu->dummy_page_pa = (unsigned long) __pa(iommu->dummy_page);
 
 	/* Now allocate and setup the IOMMU page table itself.  */
@@ -143,8 +143,8 @@ int iommu_table_init(struct iommu *iommu, int tsbsize,
 	return 0;
 
 out_free_dummy_page:
-	free_page((void *)iommu->dummy_page);
-	iommu->dummy_page = 0UL;
+	free_page(iommu->dummy_page);
+	iommu->dummy_page = NULL;
 
 out_free_map:
 	kfree(iommu->tbl.map);
diff --git a/arch/sparc/kernel/ioport.c b/arch/sparc/kernel/ioport.c
index 39b406a..3bd3481 100644
--- a/arch/sparc/kernel/ioport.c
+++ b/arch/sparc/kernel/ioport.c
@@ -264,7 +264,7 @@ static void *sbus_alloc_coherent(struct device *dev, size_t len,
 {
 	struct platform_device *op = to_platform_device(dev);
 	unsigned long len_total = PAGE_ALIGN(len);
-	unsigned long va;
+	void *va;
 	struct resource *res;
 	int order;
 
@@ -278,8 +278,8 @@ static void *sbus_alloc_coherent(struct device *dev, size_t len,
 	}
 
 	order = get_order(len_total);
-	va = __get_free_pages(gfp, order);
-	if (va == 0)
+	va = (void *)__get_free_pages(gfp, order);
+	if (!va)
 		goto err_nopages;
 
 	if ((res = kzalloc(sizeof(struct resource), GFP_KERNEL)) == NULL)
@@ -309,7 +309,7 @@ err_noiommu:
 err_nova:
 	kfree(res);
 err_nomem:
-	free_pages((void *)va, order);
+	free_pages(va, order);
 err_nopages:
 	return NULL;
 }
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index 24847b2..e2d198d 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -1033,11 +1033,11 @@ static void __init alloc_one_queue(unsigned long *pa_ptr, unsigned long qmask)
 static void __init init_cpu_send_mondo_info(struct trap_per_cpu *tb)
 {
 #ifdef CONFIG_SMP
-	unsigned long page;
+	void *page;
 
 	BUILD_BUG_ON((NR_CPUS * sizeof(u16)) > (PAGE_SIZE - 64));
 
-	page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	page = get_zeroed_page(GFP_KERNEL);
 	if (!page) {
 		prom_printf("SUN4V: Error, cannot allocate cpu mondo page.\n");
 		prom_halt();
diff --git a/arch/sparc/kernel/pci_fire.c b/arch/sparc/kernel/pci_fire.c
index b8ac1bb..ff44386 100644
--- a/arch/sparc/kernel/pci_fire.c
+++ b/arch/sparc/kernel/pci_fire.c
@@ -228,17 +228,18 @@ static int pci_fire_msi_teardown(struct pci_pbm_info *pbm, unsigned long msi)
 
 static int pci_fire_msiq_alloc(struct pci_pbm_info *pbm)
 {
-	unsigned long pages, order, i;
+	unsigned long order, i;
+	void *pages;
 
 	order = get_order(512 * 1024);
-	pages = __get_free_pages(GFP_KERNEL | __GFP_COMP, order);
-	if (pages == 0UL) {
+	pages = (void *)__get_free_pages(GFP_KERNEL | __GFP_COMP, order);
+	if (!pages) {
 		printk(KERN_ERR "MSI: Cannot allocate MSI queues (o=%lu).\n",
 		       order);
 		return -ENOMEM;
 	}
-	memset((char *)pages, 0, PAGE_SIZE << order);
-	pbm->msi_queues = (void *) pages;
+	memset(pages, 0, PAGE_SIZE << order);
+	pbm->msi_queues = pages;
 
 	upa_writeq((EVENT_QUEUE_BASE_ADDR_ALL_ONES |
 		    __pa(pbm->msi_queues)),
@@ -260,12 +261,9 @@ static int pci_fire_msiq_alloc(struct pci_pbm_info *pbm)
 
 static void pci_fire_msiq_free(struct pci_pbm_info *pbm)
 {
-	unsigned long pages, order;
+	void *pages = pbm->msi_queues;
 
-	order = get_order(512 * 1024);
-	pages = (unsigned long) pbm->msi_queues;
-
-	free_pages((void *)pages, order);
+	free_pages(pages, get_order(512 * 1024));
 
 	pbm->msi_queues = NULL;
 }
diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c
index 3ea1937..9d84e4e 100644
--- a/arch/sparc/kernel/pci_sun4v.c
+++ b/arch/sparc/kernel/pci_sun4v.c
@@ -746,20 +746,21 @@ static int pci_sun4v_msi_teardown(struct pci_pbm_info *pbm, unsigned long msi)
 
 static int pci_sun4v_msiq_alloc(struct pci_pbm_info *pbm)
 {
-	unsigned long q_size, alloc_size, pages, order;
+	unsigned long q_size, alloc_size, order;
+	void *pages;
 	int i;
 
 	q_size = pbm->msiq_ent_count * sizeof(struct pci_sun4v_msiq_entry);
 	alloc_size = (pbm->msiq_num * q_size);
 	order = get_order(alloc_size);
-	pages = __get_free_pages(GFP_KERNEL | __GFP_COMP, order);
-	if (pages == 0UL) {
+	pages = (void *)__get_free_pages(GFP_KERNEL | __GFP_COMP, order);
+	if (!pages) {
 		printk(KERN_ERR "MSI: Cannot allocate MSI queues (o=%lu).\n",
 		       order);
 		return -ENOMEM;
 	}
-	memset((char *)pages, 0, PAGE_SIZE << order);
-	pbm->msi_queues = (void *) pages;
+	memset(pages, 0, PAGE_SIZE << order);
+	pbm->msi_queues = pages;
 
 	for (i = 0; i < pbm->msiq_num; i++) {
 		unsigned long err, base = __pa(pages + (i * q_size));
@@ -794,13 +795,14 @@ static int pci_sun4v_msiq_alloc(struct pci_pbm_info *pbm)
 	return 0;
 
 h_error:
-	free_pages((void *)pages, order);
+	free_pages(pages, order);
 	return -EINVAL;
 }
 
 static void pci_sun4v_msiq_free(struct pci_pbm_info *pbm)
 {
-	unsigned long q_size, alloc_size, pages, order;
+	unsigned long q_size, alloc_size, order;
+	void *pages;
 	int i;
 
 	for (i = 0; i < pbm->msiq_num; i++) {
@@ -813,9 +815,9 @@ static void pci_sun4v_msiq_free(struct pci_pbm_info *pbm)
 	alloc_size = (pbm->msiq_num * q_size);
 	order = get_order(alloc_size);
 
-	pages = (unsigned long) pbm->msi_queues;
+	pages = pbm->msi_queues;
 
-	free_pages((void *)pages, order);
+	free_pages(pages, order);
 
 	pbm->msi_queues = NULL;
 }
@@ -937,12 +939,12 @@ static int pci_sun4v_probe(struct platform_device *op)
 	err = -ENOMEM;
 	if (!iommu_batch_initialized) {
 		for_each_possible_cpu(i) {
-			unsigned long page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+			u64 *page = get_zeroed_page(GFP_KERNEL);
 
 			if (!page)
 				goto out_err;
 
-			per_cpu(iommu_batch, i).pglist = (u64 *) page;
+			per_cpu(iommu_batch, i).pglist = page;
 		}
 		iommu_batch_initialized = 1;
 	}
diff --git a/arch/sparc/mm/io-unit.c b/arch/sparc/mm/io-unit.c
index f311bf2..707d5a0 100644
--- a/arch/sparc/mm/io-unit.c
+++ b/arch/sparc/mm/io-unit.c
@@ -200,10 +200,10 @@ static void iounit_release_scsi_sgl(struct device *dev, struct scatterlist *sg,
 }
 
 #ifdef CONFIG_SBUS
-static int iounit_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned long va, unsigned long addr, int len)
+static int iounit_map_dma_area(struct device *dev, dma_addr_t *pba, void *va, unsigned long addr, int len)
 {
 	struct iounit_struct *iounit = dev->archdata.iommu;
-	unsigned long page, end;
+	unsigned long end;
 	pgprot_t dvma_prot;
 	iopte_t __iomem *iopte;
 
@@ -212,7 +212,6 @@ static int iounit_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned lon
 	dvma_prot = __pgprot(SRMMU_CACHE | SRMMU_ET_PTE | SRMMU_PRIV);
 	end = PAGE_ALIGN((addr + len));
 	while(addr < end) {
-		page = va;
 		{
 			pgd_t *pgdp;
 			pmd_t *pmdp;
@@ -223,12 +222,12 @@ static int iounit_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned lon
 			pmdp = pmd_offset(pgdp, addr);
 			ptep = pte_offset_map(pmdp, addr);
 
-			set_pte(ptep, mk_pte(virt_to_page(page), dvma_prot));
+			set_pte(ptep, mk_pte(virt_to_page(va), dvma_prot));
 			
 			i = ((addr - IOUNIT_DMA_BASE) >> PAGE_SHIFT);
 
 			iopte = iounit->page_table + i;
-			sbus_writel(MKIOPTE(__pa(page)), iopte);
+			sbus_writel(MKIOPTE(__pa(va)), iopte);
 		}
 		addr += PAGE_SIZE;
 		va += PAGE_SIZE;
diff --git a/arch/sparc/mm/iommu.c b/arch/sparc/mm/iommu.c
index 491511d..f9d30bd 100644
--- a/arch/sparc/mm/iommu.c
+++ b/arch/sparc/mm/iommu.c
@@ -321,7 +321,7 @@ static void iommu_release_scsi_sgl(struct device *dev, struct scatterlist *sg, i
 }
 
 #ifdef CONFIG_SBUS
-static int iommu_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned long va,
+static int iommu_map_dma_area(struct device *dev, dma_addr_t *pba, void *va,
 			      unsigned long addr, int len)
 {
 	struct iommu_struct *iommu = dev->archdata.iommu;
@@ -330,7 +330,7 @@ static int iommu_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned long
 	iopte_t *first;
 	int ioptex;
 
-	BUG_ON((va & ~PAGE_MASK) != 0);
+	BUG_ON(((unsigned long)va & ~PAGE_MASK) != 0);
 	BUG_ON((addr & ~PAGE_MASK) != 0);
 	BUG_ON((len & ~PAGE_MASK) != 0);
 
@@ -344,7 +344,7 @@ static int iommu_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned long
 	first = iopte;
 	end = addr + len;
 	while(addr < end) {
-		page = va;
+		page = (unsigned long)va;
 		{
 			pgd_t *pgdp;
 			pmd_t *pmdp;
@@ -361,10 +361,10 @@ static int iommu_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned long
 			pmdp = pmd_offset(pgdp, addr);
 			ptep = pte_offset_map(pmdp, addr);
 
-			set_pte(ptep, mk_pte(virt_to_page(page), dvma_prot));
+			set_pte(ptep, mk_pte(virt_to_page(va), dvma_prot));
 		}
 		iopte_val(*iopte++) =
-		    MKIOPTE(page_to_pfn(virt_to_page(page)), ioperm_noc);
+		    MKIOPTE(page_to_pfn(virt_to_page(va)), ioperm_noc);
 		addr += PAGE_SIZE;
 		va += PAGE_SIZE;
 	}
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 31/83] efficeon: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (29 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 30/83] sparc: get rid of pointless casts Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 32/83] lguest: " Al Viro
                   ` (52 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/char/agp/efficeon-agp.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/char/agp/efficeon-agp.c b/drivers/char/agp/efficeon-agp.c
index c3d0d44..d64e601 100644
--- a/drivers/char/agp/efficeon-agp.c
+++ b/drivers/char/agp/efficeon-agp.c
@@ -57,7 +57,7 @@
 #define EFFICEON_PRESENT	(1 << 8)
 
 static struct _efficeon_private {
-	unsigned long l1_table[EFFICEON_L1_SIZE];
+	unsigned int *l1_table[EFFICEON_L1_SIZE];
 } efficeon_private;
 
 static const struct gatt_mask efficeon_generic_masks[] =
@@ -160,11 +160,11 @@ static int efficeon_free_gatt_table(struct agp_bridge_data *bridge)
 	int index, freed = 0;
 
 	for (index = 0; index < EFFICEON_L1_SIZE; index++) {
-		unsigned long page = efficeon_private.l1_table[index];
+		void *page = efficeon_private.l1_table[index];
 		if (page) {
-			efficeon_private.l1_table[index] = 0;
-			ClearPageReserved(virt_to_page((char *)page));
-			free_page((void *)page);
+			efficeon_private.l1_table[index] = NULL;
+			ClearPageReserved(virt_to_page(page));
+			free_page(page);
 			freed++;
 		}
 		printk(KERN_DEBUG PFX "efficeon_free_gatt_table(%p, %02x, %08x)\n",
@@ -208,25 +208,25 @@ static int efficeon_create_gatt_table(struct agp_bridge_data *bridge)
 
 	for (index = 0 ; index < l1_pages ; index++) {
 		int offset;
-		unsigned long page;
+		void *page;
 		unsigned long value;
 
 		page = efficeon_private.l1_table[index];
 		BUG_ON(page);
 
-		page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+		page = get_zeroed_page(GFP_KERNEL);
 		if (!page) {
 			efficeon_free_gatt_table(agp_bridge);
 			return -ENOMEM;
 		}
-		SetPageReserved(virt_to_page((char *)page));
+		SetPageReserved(virt_to_page(page));
 
 		for (offset = 0; offset < PAGE_SIZE; offset += clflush_chunk)
-			clflush((char *)page+offset);
+			clflush(page+offset);
 
 		efficeon_private.l1_table[index] = page;
 
-		value = virt_to_phys((unsigned long *)page) | pati | present | index;
+		value = virt_to_phys(page) | pati | present | index;
 
 		pci_write_config_dword(agp_bridge->dev,
 			EFFICEON_ATTPAGE, value);
@@ -260,7 +260,7 @@ static int efficeon_insert_memory(struct agp_memory * mem, off_t pg_start, int t
 		int index = pg_start + i;
 		unsigned long insert = efficeon_mask_memory(mem->pages[i]);
 
-		page = (unsigned int *) efficeon_private.l1_table[index >> 10];
+		page = efficeon_private.l1_table[index >> 10];
 
 		if (!page)
 			continue;
@@ -299,7 +299,7 @@ static int efficeon_remove_memory(struct agp_memory * mem, off_t pg_start, int t
 
 	for (i = 0; i < count; i++) {
 		int index = pg_start + i;
-		unsigned int *page = (unsigned int *) efficeon_private.l1_table[index >> 10];
+		unsigned int *page = efficeon_private.l1_table[index >> 10];
 
 		if (!page)
 			continue;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 32/83] lguest: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (30 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 31/83] efficeon: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 33/83] drivers/pci: " Al Viro
                   ` (51 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/lguest/lg.h          | 2 +-
 drivers/lguest/lguest_user.c | 8 ++++----
 drivers/lguest/page_tables.c | 8 ++++----
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/lguest/lg.h b/drivers/lguest/lg.h
index ac8ad04..3334ca0 100644
--- a/drivers/lguest/lg.h
+++ b/drivers/lguest/lg.h
@@ -56,7 +56,7 @@ struct lg_cpu {
 	unsigned long *reg_read; /* register from LHREQ_GETREG */
 
 	/* At end of a page shared mapped over lguest_pages in guest. */
-	unsigned long regs_page;
+	void *regs_page;
 	struct lguest_regs *regs;
 
 	struct lguest_pages *last_pages;
diff --git a/drivers/lguest/lguest_user.c b/drivers/lguest/lguest_user.c
index fe2e859..dac142b 100644
--- a/drivers/lguest/lguest_user.c
+++ b/drivers/lguest/lguest_user.c
@@ -170,12 +170,12 @@ static int lg_cpu_start(struct lg_cpu *cpu, unsigned id, unsigned long start_ip)
 	 * We need a complete page for the Guest registers: they are accessible
 	 * to the Guest and we can only grant it access to whole pages.
 	 */
-	cpu->regs_page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	cpu->regs_page = get_zeroed_page(GFP_KERNEL);
 	if (!cpu->regs_page)
 		return -ENOMEM;
 
 	/* We actually put the registers at the end of the page. */
-	cpu->regs = (void *)cpu->regs_page + PAGE_SIZE - sizeof(*cpu->regs);
+	cpu->regs = cpu->regs_page + PAGE_SIZE - sizeof(*cpu->regs);
 
 	/*
 	 * Now we initialize the Guest's registers, handing it the start
@@ -275,7 +275,7 @@ static int initialize(struct file *file, const unsigned long __user *input)
 
 free_regs:
 	/* FIXME: This should be in free_vcpu */
-	free_page((void *)lg->cpus[0].regs_page);
+	free_page(lg->cpus[0].regs_page);
 free_lg:
 	kfree(lg);
 unlock:
@@ -377,7 +377,7 @@ static int close(struct inode *inode, struct file *file)
 		/* Cancels the hrtimer set via LHCALL_SET_CLOCKEVENT. */
 		hrtimer_cancel(&lg->cpus[i].hrt);
 		/* We can free up the register page we allocated. */
-		free_page((void *)lg->cpus[i].regs_page);
+		free_page(lg->cpus[i].regs_page);
 		/*
 		 * Now all the memory cleanups are done, it's safe to release
 		 * the Launcher's memory management structure.
diff --git a/drivers/lguest/page_tables.c b/drivers/lguest/page_tables.c
index de1c8ac..f476c93 100644
--- a/drivers/lguest/page_tables.c
+++ b/drivers/lguest/page_tables.c
@@ -313,13 +313,13 @@ static pte_t *find_spte(struct lg_cpu *cpu, unsigned long vaddr, bool allocate,
 	spgd = spgd_addr(cpu, cpu->cpu_pgd, vaddr);
 	if (!(pgd_flags(*spgd) & _PAGE_PRESENT)) {
 		/* No shadow entry: allocate a new shadow PTE page. */
-		unsigned long ptepage;
+		pte_t *ptepage;
 
 		/* If they didn't want us to allocate anything, stop. */
 		if (!allocate)
 			return NULL;
 
-		ptepage = (unsigned long)get_zeroed_page(GFP_KERNEL);
+		ptepage = get_zeroed_page(GFP_KERNEL);
 		/*
 		 * This is not really the Guest's fault, but killing it is
 		 * simple for this corner case.
@@ -345,13 +345,13 @@ static pte_t *find_spte(struct lg_cpu *cpu, unsigned long vaddr, bool allocate,
 
 	if (!(pmd_flags(*spmd) & _PAGE_PRESENT)) {
 		/* No shadow entry: allocate a new shadow PTE page. */
-		unsigned long ptepage;
+		pte_t *ptepage;
 
 		/* If they didn't want us to allocate anything, stop. */
 		if (!allocate)
 			return NULL;
 
-		ptepage = (unsigned long)get_zeroed_page(GFP_KERNEL);
+		ptepage = get_zeroed_page(GFP_KERNEL);
 
 		/*
 		 * This is not really the Guest's fault, but killing it is
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 33/83] drivers/pci: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (31 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 32/83] lguest: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 34/83] drivers/s390: ger " Al Viro
                   ` (50 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/pci/host/pci-tegra.c       | 10 +++++-----
 drivers/pci/host/pcie-designware.c |  6 +++---
 drivers/pci/host/pcie-designware.h |  2 +-
 drivers/pci/host/pcie-rcar.c       |  6 +++---
 drivers/pci/host/pcie-xilinx.c     | 10 +++++-----
 5 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c
index 9ad90fd..ba7fc9e 100644
--- a/drivers/pci/host/pci-tegra.c
+++ b/drivers/pci/host/pci-tegra.c
@@ -241,7 +241,7 @@ struct tegra_msi {
 	struct msi_controller chip;
 	DECLARE_BITMAP(used, INT_PCI_MSI_NR);
 	struct irq_domain *domain;
-	unsigned long pages;
+	void *pages;
 	struct mutex lock;
 	int irq;
 };
@@ -1214,7 +1214,7 @@ static int tegra_msi_setup_irq(struct msi_controller *chip,
 
 	irq_set_msi_desc(irq, desc);
 
-	msg.address_lo = virt_to_phys((void *)msi->pages);
+	msg.address_lo = virt_to_phys(msi->pages);
 	/* 32 bit address only */
 	msg.address_hi = 0;
 	msg.data = hwirq;
@@ -1296,8 +1296,8 @@ static int tegra_pcie_enable_msi(struct tegra_pcie *pcie)
 	}
 
 	/* setup AFI/FPCI range */
-	msi->pages = __get_free_pages(GFP_KERNEL, 0);
-	base = virt_to_phys((void *)msi->pages);
+	msi->pages = (void *)__get_free_pages(GFP_KERNEL, 0);
+	base = virt_to_phys(msi->pages);
 
 	afi_writel(pcie, base >> soc->msi_base_shift, AFI_MSI_FPCI_BAR_ST);
 	afi_writel(pcie, base, AFI_MSI_AXI_BAR_ST);
@@ -1347,7 +1347,7 @@ static int tegra_pcie_disable_msi(struct tegra_pcie *pcie)
 	afi_writel(pcie, 0, AFI_MSI_EN_VEC6);
 	afi_writel(pcie, 0, AFI_MSI_EN_VEC7);
 
-	free_pages((void *)msi->pages, 0);
+	free_pages(msi->pages, 0);
 
 	if (msi->irq > 0)
 		free_irq(msi->irq, pcie);
diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c
index 02a7452..769fc9d 100644
--- a/drivers/pci/host/pcie-designware.c
+++ b/drivers/pci/host/pcie-designware.c
@@ -206,8 +206,8 @@ void dw_pcie_msi_init(struct pcie_port *pp)
 {
 	u64 msi_target;
 
-	pp->msi_data = __get_free_pages(GFP_KERNEL, 0);
-	msi_target = virt_to_phys((void *)pp->msi_data);
+	pp->msi_data = (void *)__get_free_pages(GFP_KERNEL, 0);
+	msi_target = virt_to_phys(pp->msi_data);
 
 	/* program the msi_data */
 	dw_pcie_wr_own_conf(pp, PCIE_MSI_ADDR_LO, 4,
@@ -307,7 +307,7 @@ static void dw_msi_setup_msg(struct pcie_port *pp, unsigned int irq, u32 pos)
 	if (pp->ops->get_msi_addr)
 		msi_target = pp->ops->get_msi_addr(pp);
 	else
-		msi_target = virt_to_phys((void *)pp->msi_data);
+		msi_target = virt_to_phys(pp->msi_data);
 
 	msg.address_lo = (u32)(msi_target & 0xffffffff);
 	msg.address_hi = (u32)(msi_target >> 32 & 0xffffffff);
diff --git a/drivers/pci/host/pcie-designware.h b/drivers/pci/host/pcie-designware.h
index 2356d29..c77704b 100644
--- a/drivers/pci/host/pcie-designware.h
+++ b/drivers/pci/host/pcie-designware.h
@@ -47,7 +47,7 @@ struct pcie_port {
 	struct pcie_host_ops	*ops;
 	int			msi_irq;
 	struct irq_domain	*irq_domain;
-	unsigned long		msi_data;
+	void			*msi_data;
 	DECLARE_BITMAP(msi_irq_in_use, MAX_MSI_IRQS);
 };
 
diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
index f4fa6c5..fdeb72f 100644
--- a/drivers/pci/host/pcie-rcar.c
+++ b/drivers/pci/host/pcie-rcar.c
@@ -114,7 +114,7 @@ struct rcar_msi {
 	DECLARE_BITMAP(used, INT_PCI_MSI_NR);
 	struct irq_domain *domain;
 	struct msi_controller chip;
-	unsigned long pages;
+	void *pages;
 	struct mutex lock;
 	int irq1;
 	int irq2;
@@ -734,8 +734,8 @@ static int rcar_pcie_enable_msi(struct rcar_pcie *pcie)
 	}
 
 	/* setup MSI data target */
-	msi->pages = __get_free_pages(GFP_KERNEL, 0);
-	base = virt_to_phys((void *)msi->pages);
+	msi->pages = (void *)__get_free_pages(GFP_KERNEL, 0);
+	base = virt_to_phys(msi->pages);
 
 	rcar_pci_write_reg(pcie, base | MSIFE, PCIEMSIALR);
 	rcar_pci_write_reg(pcie, 0, PCIEMSIAUR);
diff --git a/drivers/pci/host/pcie-xilinx.c b/drivers/pci/host/pcie-xilinx.c
index a9438d2..3cc679d 100644
--- a/drivers/pci/host/pcie-xilinx.c
+++ b/drivers/pci/host/pcie-xilinx.c
@@ -111,7 +111,7 @@
 struct xilinx_pcie_port {
 	void __iomem *reg_base;
 	u32 irq;
-	unsigned long msi_pages;
+	void *msi_pages;
 	u8 root_busno;
 	struct device *dev;
 	struct irq_domain *irq_domain;
@@ -297,7 +297,7 @@ static int xilinx_pcie_msi_setup_irq(struct msi_controller *chip,
 
 	irq_set_msi_desc(irq, desc);
 
-	msg_addr = virt_to_phys((void *)port->msi_pages);
+	msg_addr = virt_to_phys(port->msi_pages);
 
 	msg.address_hi = 0;
 	msg.address_lo = msg_addr;
@@ -353,8 +353,8 @@ static void xilinx_pcie_enable_msi(struct xilinx_pcie_port *port)
 {
 	phys_addr_t msg_addr;
 
-	port->msi_pages = __get_free_pages(GFP_KERNEL, 0);
-	msg_addr = virt_to_phys((void *)port->msi_pages);
+	port->msi_pages = (void *)__get_free_pages(GFP_KERNEL, 0);
+	msg_addr = virt_to_phys(port->msi_pages);
 	pcie_write(port, 0x0, XILINX_PCIE_REG_MSIBASE1);
 	pcie_write(port, msg_addr, XILINX_PCIE_REG_MSIBASE2);
 }
@@ -527,7 +527,7 @@ static void xilinx_pcie_free_irq_domain(struct xilinx_pcie_port *port)
 	/* Free IRQ Domain */
 	if (IS_ENABLED(CONFIG_PCI_MSI)) {
 
-		free_pages((void *)port->msi_pages, 0);
+		free_pages(port->msi_pages, 0);
 
 		num_irqs = XILINX_NUM_MSI_IRQS;
 	} else {
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 34/83] drivers/s390: ger rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (32 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 33/83] drivers/pci: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 35/83] s390 kvm: get " Al Viro
                   ` (49 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/s390/block/xpram.c        | 24 ++++++++++++------------
 drivers/s390/char/sclp_ftp.c      | 10 +++++-----
 drivers/s390/cio/qdio.h           |  2 +-
 drivers/s390/cio/qdio_main.c      |  2 +-
 drivers/s390/cio/qdio_setup.c     |  4 ++--
 drivers/s390/cio/qdio_thinint.c   |  2 +-
 drivers/s390/net/qeth_core_main.c |  4 ++--
 7 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/drivers/s390/block/xpram.c b/drivers/s390/block/xpram.c
index 542c6d0..87d13a6 100644
--- a/drivers/s390/block/xpram.c
+++ b/drivers/s390/block/xpram.c
@@ -87,7 +87,7 @@ MODULE_LICENSE("GPL");
  *           -EIO:         if pgin failed
  *           -ENXIO:       if xpram has vanished
  */
-static int xpram_page_in (unsigned long page_addr, unsigned int xpage_index)
+static int xpram_page_in (void *page_addr, unsigned int xpage_index)
 {
 	int cc = 2;	/* return unused cc 2 if pgin traps */
 
@@ -117,7 +117,7 @@ static int xpram_page_in (unsigned long page_addr, unsigned int xpage_index)
  *           -EIO:         if pgout failed
  *           -ENXIO:       if xpram has vanished
  */
-static long xpram_page_out (unsigned long page_addr, unsigned int xpage_index)
+static long xpram_page_out (void *page_addr, unsigned int xpage_index)
 {
 	int cc = 2;	/* return unused cc 2 if pgin traps */
 
@@ -142,14 +142,14 @@ static long xpram_page_out (unsigned long page_addr, unsigned int xpage_index)
  */
 static int xpram_present(void)
 {
-	unsigned long mem_page;
+	void *mem_page;
 	int rc;
 
-	mem_page = (unsigned long) __get_free_page(GFP_KERNEL);
+	mem_page = (void *)__get_free_page(GFP_KERNEL);
 	if (!mem_page)
 		return -ENOMEM;
 	rc = xpram_page_in(mem_page, 0);
-	free_page((void *)mem_page);
+	free_page(mem_page);
 	return rc ? -ENXIO : 0;
 }
 
@@ -159,9 +159,9 @@ static int xpram_present(void)
 static unsigned long xpram_highest_page_index(void)
 {
 	unsigned int page_index, add_bit;
-	unsigned long mem_page;
+	void *mem_page;
 
-	mem_page = (unsigned long) __get_free_page(GFP_KERNEL);
+	mem_page = (void *) __get_free_page(GFP_KERNEL);
 	if (!mem_page)
 		return 0;
 
@@ -173,7 +173,7 @@ static unsigned long xpram_highest_page_index(void)
 		add_bit >>= 1;
 	}
 
-	free_page((void *)mem_page);
+	free_page(mem_page);
 
 	return page_index;
 }
@@ -187,7 +187,7 @@ static blk_qc_t xpram_make_request(struct request_queue *q, struct bio *bio)
 	struct bio_vec bvec;
 	struct bvec_iter iter;
 	unsigned int index;
-	unsigned long page_addr;
+	void *page_addr;
 	unsigned long bytes;
 
 	blk_queue_split(q, &bio, q->bio_split);
@@ -203,10 +203,10 @@ static blk_qc_t xpram_make_request(struct request_queue *q, struct bio *bio)
 		goto fail;
 	index = (bio->bi_iter.bi_sector >> 3) + xdev->offset;
 	bio_for_each_segment(bvec, bio, iter) {
-		page_addr = (unsigned long)
-			kmap(bvec.bv_page) + bvec.bv_offset;
+		page_addr = kmap(bvec.bv_page) + bvec.bv_offset;
 		bytes = bvec.bv_len;
-		if ((page_addr & 4095) != 0 || (bytes & 4095) != 0)
+		if (((unsigned long)page_addr & 4095) != 0 ||
+		    (bytes & 4095) != 0)
 			/* More paranoia. */
 			goto fail;
 		while (bytes > 0) {
diff --git a/drivers/s390/char/sclp_ftp.c b/drivers/s390/char/sclp_ftp.c
index 726e736..4de9d40 100644
--- a/drivers/s390/char/sclp_ftp.c
+++ b/drivers/s390/char/sclp_ftp.c
@@ -239,7 +239,7 @@ static struct sclp_register sclp_ftp_event = {
 int sclp_ftp_startup(void)
 {
 #ifdef DEBUG
-	unsigned long info;
+	void *info;
 #endif
 	int rc;
 
@@ -248,10 +248,10 @@ int sclp_ftp_startup(void)
 		return rc;
 
 #ifdef DEBUG
-	info = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	info = get_zeroed_page(GFP_KERNEL);
 
-	if (info != 0) {
-		struct sysinfo_2_2_2 *info222 = (struct sysinfo_2_2_2 *)info;
+	if (info) {
+		struct sysinfo_2_2_2 *info222 = info;
 
 		if (!stsi(info222, 2, 2, 2)) { /* get SYSIB 2.2.2 */
 			info222->name[sizeof(info222->name) - 1] = '\0';
@@ -260,7 +260,7 @@ int sclp_ftp_startup(void)
 				 info222->lpar_number, info222->name);
 		}
 
-		free_page((void *)info);
+		free_page(info);
 	}
 #endif	/* DEBUG */
 	return 0;
diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h
index 7e70f92..6551443 100644
--- a/drivers/s390/cio/qdio.h
+++ b/drivers/s390/cio/qdio.h
@@ -300,7 +300,7 @@ struct qdio_irq {
 	int perf_stat_enabled;
 
 	struct qdr *qdr;
-	unsigned long chsc_page;
+	void *chsc_page;
 
 	struct qdio_q *input_qs[QDIO_MAX_QUEUES_PER_IRQ];
 	struct qdio_q *output_qs[QDIO_MAX_QUEUES_PER_IRQ];
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
index 0b1ffc2..86c4599 100644
--- a/drivers/s390/cio/qdio_main.c
+++ b/drivers/s390/cio/qdio_main.c
@@ -1282,7 +1282,7 @@ int qdio_allocate(struct qdio_initialize *init_data)
 	 * qdio_establish. In case of low memory and swap on a zfcp disk
 	 * we may not be able to allocate memory otherwise.
 	 */
-	irq_ptr->chsc_page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	irq_ptr->chsc_page = get_zeroed_page(GFP_KERNEL);
 	if (!irq_ptr->chsc_page)
 		goto out_rel;
 
diff --git a/drivers/s390/cio/qdio_setup.c b/drivers/s390/cio/qdio_setup.c
index 637d1a8..7322dd3 100644
--- a/drivers/s390/cio/qdio_setup.c
+++ b/drivers/s390/cio/qdio_setup.c
@@ -309,7 +309,7 @@ int qdio_setup_get_ssqd(struct qdio_irq *irq_ptr,
 		if (!ssqd)
 			return -ENOMEM;
 	} else {
-		ssqd = (struct chsc_ssqd_area *)irq_ptr->chsc_page;
+		ssqd = irq_ptr->chsc_page;
 	}
 
 	rc = chsc_ssqd(*schid, ssqd);
@@ -389,7 +389,7 @@ void qdio_release_memory(struct qdio_irq *irq_ptr)
 		}
 	}
 	free_page(irq_ptr->qdr);
-	free_page((void *)irq_ptr->chsc_page);
+	free_page(irq_ptr->chsc_page);
 	free_page(irq_ptr);
 }
 
diff --git a/drivers/s390/cio/qdio_thinint.c b/drivers/s390/cio/qdio_thinint.c
index 5d06253..ff0355d5 100644
--- a/drivers/s390/cio/qdio_thinint.c
+++ b/drivers/s390/cio/qdio_thinint.c
@@ -213,7 +213,7 @@ static void tiqdio_thinint_handler(struct airq_struct *airq)
 
 static int set_subchannel_ind(struct qdio_irq *irq_ptr, int reset)
 {
-	struct chsc_scssc_area *scssc = (void *)irq_ptr->chsc_page;
+	struct chsc_scssc_area *scssc = irq_ptr->chsc_page;
 	u64 summary_indicator_addr, subchannel_indicator_addr;
 	int rc;
 
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index b6bd54c..18f4db4 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -3160,7 +3160,7 @@ static int qeth_query_setdiagass(struct qeth_card *card)
 
 static void qeth_get_trap_id(struct qeth_card *card, struct qeth_trap_id *tid)
 {
-	unsigned long info = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	void *info = get_zeroed_page(GFP_KERNEL);
 	struct sysinfo_2_2_2 *info222 = (struct sysinfo_2_2_2 *)info;
 	struct sysinfo_3_2_2 *info322 = (struct sysinfo_3_2_2 *)info;
 	struct ccw_dev_id ccwid;
@@ -3179,7 +3179,7 @@ static void qeth_get_trap_id(struct qeth_card *card, struct qeth_trap_id *tid)
 		EBCASC(info322->vm[0].name, sizeof(info322->vm[0].name));
 		memcpy(tid->vmname, info322->vm[0].name, sizeof(tid->vmname));
 	}
-	free_page((void *)info);
+	free_page(info);
 	return;
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 35/83] s390 kvm: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (33 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 34/83] drivers/s390: ger " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 36/83] pcibios: " Al Viro
                   ` (48 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/s390/kvm/priv.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c
index af22195..93963ff 100644
--- a/arch/s390/kvm/priv.c
+++ b/arch/s390/kvm/priv.c
@@ -504,7 +504,7 @@ static int handle_stsi(struct kvm_vcpu *vcpu)
 	int fc = (vcpu->run->s.regs.gprs[0] & 0xf0000000) >> 28;
 	int sel1 = vcpu->run->s.regs.gprs[0] & 0xff;
 	int sel2 = vcpu->run->s.regs.gprs[1] & 0xffff;
-	unsigned long mem = 0;
+	void *mem = NULL;
 	u64 operand2;
 	int rc = 0;
 	ar_t ar;
@@ -538,23 +538,23 @@ static int handle_stsi(struct kvm_vcpu *vcpu)
 	switch (fc) {
 	case 1: /* same handling for 1 and 2 */
 	case 2:
-		mem = (unsigned long)get_zeroed_page(GFP_KERNEL);
+		mem = get_zeroed_page(GFP_KERNEL);
 		if (!mem)
 			goto out_no_data;
-		if (stsi((void *) mem, fc, sel1, sel2))
+		if (stsi(mem, fc, sel1, sel2))
 			goto out_no_data;
 		break;
 	case 3:
 		if (sel1 != 2 || sel2 != 2)
 			goto out_no_data;
-		mem = (unsigned long)get_zeroed_page(GFP_KERNEL);
+		mem = get_zeroed_page(GFP_KERNEL);
 		if (!mem)
 			goto out_no_data;
-		handle_stsi_3_2_2(vcpu, (void *) mem);
+		handle_stsi_3_2_2(vcpu, mem);
 		break;
 	}
 
-	rc = write_guest(vcpu, operand2, ar, (void *)mem, PAGE_SIZE);
+	rc = write_guest(vcpu, operand2, ar, mem, PAGE_SIZE);
 	if (rc) {
 		rc = kvm_s390_inject_prog_cond(vcpu, rc);
 		goto out;
@@ -564,14 +564,14 @@ static int handle_stsi(struct kvm_vcpu *vcpu)
 		rc = -EREMOTE;
 	}
 	trace_kvm_s390_handle_stsi(vcpu, fc, sel1, sel2, operand2);
-	free_page((void *)mem);
+	free_page(mem);
 	kvm_s390_set_psw_cc(vcpu, 0);
 	vcpu->run->s.regs.gprs[0] = 0;
 	return rc;
 out_no_data:
 	kvm_s390_set_psw_cc(vcpu, 3);
 out:
-	free_page((void *)mem);
+	free_page(mem);
 	return rc;
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 36/83] pcibios: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (34 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 35/83] s390 kvm: get " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 37/83] ste_dma40: " Al Viro
                   ` (47 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/x86/pci/pcbios.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/x86/pci/pcbios.c b/arch/x86/pci/pcbios.c
index 7958c26..674ecff 100644
--- a/arch/x86/pci/pcbios.c
+++ b/arch/x86/pci/pcbios.c
@@ -381,14 +381,14 @@ struct irq_routing_table * pcibios_get_irq_routing_table(void)
 	struct irq_routing_options opt;
 	struct irq_routing_table *rt = NULL;
 	int ret, map;
-	unsigned long page;
+	void *page;
 
 	if (!pci_bios_present)
 		return NULL;
-	page = __get_free_page(GFP_KERNEL);
+	page = (void *)__get_free_page(GFP_KERNEL);
 	if (!page)
 		return NULL;
-	opt.table = (struct irq_info *) page;
+	opt.table = page;
 	opt.size = PAGE_SIZE;
 	opt.segment = __KERNEL_DS;
 
@@ -419,11 +419,11 @@ struct irq_routing_table * pcibios_get_irq_routing_table(void)
 			memset(rt, 0, sizeof(struct irq_routing_table));
 			rt->size = opt.size + sizeof(struct irq_routing_table);
 			rt->exclusive_irqs = map;
-			memcpy(rt->slots, (void *) page, opt.size);
+			memcpy(rt->slots, page, opt.size);
 			printk(KERN_INFO "PCI: Using BIOS Interrupt Routing Table\n");
 		}
 	}
-	free_page((void *)page);
+	free_page(page);
 	return rt;
 }
 EXPORT_SYMBOL(pcibios_get_irq_routing_table);
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 37/83] ste_dma40: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (35 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 36/83] pcibios: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 38/83] usb_mon: " Al Viro
                   ` (46 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/dma/ste_dma40.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c
index 2971d47..e2e0225 100644
--- a/drivers/dma/ste_dma40.c
+++ b/drivers/dma/ste_dma40.c
@@ -3404,7 +3404,7 @@ static void __init d40_hw_init(struct d40_base *base)
 static int __init d40_lcla_allocate(struct d40_base *base)
 {
 	struct d40_lcla_pool *pool = &base->lcla_pool;
-	unsigned long *page_list;
+	void **page_list;
 	int i, j;
 	int ret = 0;
 
@@ -3413,7 +3413,7 @@ static int __init d40_lcla_allocate(struct d40_base *base)
 	 * To full fill this hardware requirement without wasting 256 kb
 	 * we allocate pages until we get an aligned one.
 	 */
-	page_list = kmalloc(sizeof(unsigned long) * MAX_LCLA_ALLOC_ATTEMPTS,
+	page_list = kmalloc(sizeof(void *) * MAX_LCLA_ALLOC_ATTEMPTS,
 			    GFP_KERNEL);
 
 	if (!page_list) {
@@ -3425,7 +3425,7 @@ static int __init d40_lcla_allocate(struct d40_base *base)
 	base->lcla_pool.pages = SZ_1K * base->num_phy_chans / PAGE_SIZE;
 
 	for (i = 0; i < MAX_LCLA_ALLOC_ATTEMPTS; i++) {
-		page_list[i] = __get_free_pages(GFP_KERNEL,
+		page_list[i] = (void *)__get_free_pages(GFP_KERNEL,
 						base->lcla_pool.pages);
 		if (!page_list[i]) {
 
@@ -3434,20 +3434,20 @@ static int __init d40_lcla_allocate(struct d40_base *base)
 			ret = -ENOMEM;
 
 			for (j = 0; j < i; j++)
-				free_pages((void *)page_list[j], base->lcla_pool.pages);
+				free_pages(page_list[j], base->lcla_pool.pages);
 			goto failure;
 		}
 
-		if ((virt_to_phys((void *)page_list[i]) &
+		if ((virt_to_phys(page_list[i]) &
 		     (LCLA_ALIGNMENT - 1)) == 0)
 			break;
 	}
 
 	for (j = 0; j < i; j++)
-		free_pages((void *)page_list[j], base->lcla_pool.pages);
+		free_pages(page_list[j], base->lcla_pool.pages);
 
 	if (i < MAX_LCLA_ALLOC_ATTEMPTS) {
-		base->lcla_pool.base = (void *)page_list[i];
+		base->lcla_pool.base = page_list[i];
 	} else {
 		/*
 		 * After many attempts and no succees with finding the correct
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 38/83] usb_mon: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (36 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 37/83] ste_dma40: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 39/83] gnttab_end_foreign_access(): switch the last argument to void * Al Viro
                   ` (45 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/usb/mon/mon_bin.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/mon/mon_bin.c b/drivers/usb/mon/mon_bin.c
index cdc68e5..26d497b 100644
--- a/drivers/usb/mon/mon_bin.c
+++ b/drivers/usb/mon/mon_bin.c
@@ -1305,17 +1305,16 @@ static int mon_bin_wait_event(struct file *file, struct mon_reader_bin *rp)
 static int mon_alloc_buff(struct mon_pgmap *map, int npages)
 {
 	int n;
-	unsigned long vaddr;
 
 	for (n = 0; n < npages; n++) {
-		vaddr = (unsigned long)get_zeroed_page(GFP_KERNEL);
-		if (vaddr == 0) {
+		void *vaddr = get_zeroed_page(GFP_KERNEL);
+		if (!vaddr) {
 			while (n-- != 0)
 				free_page(map[n].ptr);
 			return -ENOMEM;
 		}
-		map[n].ptr = (unsigned char *) vaddr;
-		map[n].pg = virt_to_page((void *) vaddr);
+		map[n].ptr = vaddr;
+		map[n].pg = virt_to_page(vaddr);
 	}
 	return 0;
 }
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 39/83] gnttab_end_foreign_access(): switch the last argument to void *
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (37 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 38/83] usb_mon: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 40/83] nios2: dma_free_coherent(): get rid of pointless casts Al Viro
                   ` (44 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/block/xen-blkfront.c      | 12 ++++++------
 drivers/char/tpm/xen-tpmfront.c   |  2 +-
 drivers/input/misc/xen-kbdfront.c |  4 ++--
 drivers/net/xen-netfront.c        |  6 +++---
 drivers/pci/xen-pcifront.c        |  2 +-
 drivers/scsi/xen-scsifront.c      |  8 +++-----
 drivers/xen/grant-table.c         |  6 +++---
 include/xen/grant_table.h         |  3 +--
 8 files changed, 20 insertions(+), 23 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 19b8697..c5873c2 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -1094,7 +1094,7 @@ static void blkif_free(struct blkfront_info *info, int suspend)
 			list_del(&persistent_gnt->node);
 			if (persistent_gnt->gref != GRANT_INVALID_REF) {
 				gnttab_end_foreign_access(persistent_gnt->gref,
-				                          0, 0UL);
+				                          0, NULL);
 				info->persistent_gnts_c--;
 			}
 			if (info->feature_persistent)
@@ -1131,7 +1131,7 @@ static void blkif_free(struct blkfront_info *info, int suspend)
 		       info->shadow[i].req.u.rw.nr_segments;
 		for (j = 0; j < segs; j++) {
 			persistent_gnt = info->shadow[i].grants_used[j];
-			gnttab_end_foreign_access(persistent_gnt->gref, 0, 0UL);
+			gnttab_end_foreign_access(persistent_gnt->gref, 0, NULL);
 			if (info->feature_persistent)
 				__free_page(persistent_gnt->page);
 			kfree(persistent_gnt);
@@ -1146,7 +1146,7 @@ static void blkif_free(struct blkfront_info *info, int suspend)
 
 		for (j = 0; j < INDIRECT_GREFS(segs); j++) {
 			persistent_gnt = info->shadow[i].indirect_grants[j];
-			gnttab_end_foreign_access(persistent_gnt->gref, 0, 0UL);
+			gnttab_end_foreign_access(persistent_gnt->gref, 0, NULL);
 			__free_page(persistent_gnt->page);
 			kfree(persistent_gnt);
 		}
@@ -1170,7 +1170,7 @@ free_shadow:
 	/* Free resources associated with old device channel. */
 	for (i = 0; i < info->nr_ring_pages; i++) {
 		if (info->ring_ref[i] != GRANT_INVALID_REF) {
-			gnttab_end_foreign_access(info->ring_ref[i], 0, 0);
+			gnttab_end_foreign_access(info->ring_ref[i], 0, NULL);
 			info->ring_ref[i] = GRANT_INVALID_REF;
 		}
 	}
@@ -1261,7 +1261,7 @@ static void blkif_completion(struct blk_shadow *s, struct blkfront_info *info,
 			 * so it will not be picked again unless we run out of
 			 * persistent grants.
 			 */
-			gnttab_end_foreign_access(s->grants_used[i]->gref, 0, 0UL);
+			gnttab_end_foreign_access(s->grants_used[i]->gref, 0, NULL);
 			s->grants_used[i]->gref = GRANT_INVALID_REF;
 			list_add_tail(&s->grants_used[i]->node, &info->grants);
 		}
@@ -1277,7 +1277,7 @@ static void blkif_completion(struct blk_shadow *s, struct blkfront_info *info,
 			} else {
 				struct page *indirect_page;
 
-				gnttab_end_foreign_access(s->indirect_grants[i]->gref, 0, 0UL);
+				gnttab_end_foreign_access(s->indirect_grants[i]->gref, 0, NULL);
 				/*
 				 * Add the used indirect page back to the list of
 				 * available pages for indirect grefs.
diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c
index 4ac4830..2ccd0c9 100644
--- a/drivers/char/tpm/xen-tpmfront.c
+++ b/drivers/char/tpm/xen-tpmfront.c
@@ -273,7 +273,7 @@ static void ring_free(struct tpm_private *priv)
 
 	if (priv->ring_ref)
 		gnttab_end_foreign_access(priv->ring_ref, 0,
-				(unsigned long)priv->shr);
+				priv->shr);
 	else
 		free_page(priv->shr);
 
diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
index d70a619..93f3a5c 100644
--- a/drivers/input/misc/xen-kbdfront.c
+++ b/drivers/input/misc/xen-kbdfront.c
@@ -291,7 +291,7 @@ static int xenkbd_connect_backend(struct xenbus_device *dev,
  error_evtchan:
 	xenbus_free_evtchn(dev, evtchn);
  error_grant:
-	gnttab_end_foreign_access(info->gref, 0, 0UL);
+	gnttab_end_foreign_access(info->gref, 0, NULL);
 	info->gref = -1;
 	return ret;
 }
@@ -302,7 +302,7 @@ static void xenkbd_disconnect_backend(struct xenkbd_info *info)
 		unbind_from_irqhandler(info->irq, info);
 	info->irq = -1;
 	if (info->gref >= 0)
-		gnttab_end_foreign_access(info->gref, 0, 0UL);
+		gnttab_end_foreign_access(info->gref, 0, NULL);
 	info->gref = -1;
 }
 
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index 0f9b7cf..c36af78 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -1117,7 +1117,7 @@ static void xennet_release_tx_bufs(struct netfront_queue *queue)
 		get_page(queue->grant_tx_page[i]);
 		gnttab_end_foreign_access(queue->grant_tx_ref[i],
 					  GNTMAP_readonly,
-					  (unsigned long)page_address(queue->grant_tx_page[i]));
+					  page_address(queue->grant_tx_page[i]));
 		queue->grant_tx_page[i] = NULL;
 		queue->grant_tx_ref[i] = GRANT_INVALID_REF;
 		add_id_to_freelist(&queue->tx_skb_freelist, queue->tx_skbs, i);
@@ -1150,7 +1150,7 @@ static void xennet_release_rx_bufs(struct netfront_queue *queue)
 		 */
 		get_page(page);
 		gnttab_end_foreign_access(ref, 0,
-					  (unsigned long)page_address(page));
+					  page_address(page));
 		queue->grant_rx_ref[id] = GRANT_INVALID_REF;
 
 		kfree_skb(skb);
@@ -1378,7 +1378,7 @@ static void xennet_end_access(int ref, void *page)
 {
 	/* This frees the page as a side-effect */
 	if (ref != GRANT_INVALID_REF)
-		gnttab_end_foreign_access(ref, 0, (unsigned long)page);
+		gnttab_end_foreign_access(ref, 0, page);
 }
 
 static void xennet_disconnect_backend(struct netfront_info *info)
diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
index 85f69e5..90b77b9 100644
--- a/drivers/pci/xen-pcifront.c
+++ b/drivers/pci/xen-pcifront.c
@@ -772,7 +772,7 @@ static void free_pdev(struct pcifront_device *pdev)
 
 	if (pdev->gnt_ref != INVALID_GRANT_REF)
 		gnttab_end_foreign_access(pdev->gnt_ref, 0 /* r/w page */,
-					  (unsigned long)pdev->sh_info);
+					  pdev->sh_info);
 	else
 		free_page(pdev->sh_info);
 
diff --git a/drivers/scsi/xen-scsifront.c b/drivers/scsi/xen-scsifront.c
index d59486a..825759b 100644
--- a/drivers/scsi/xen-scsifront.c
+++ b/drivers/scsi/xen-scsifront.c
@@ -215,7 +215,7 @@ static void scsifront_gnttab_done(struct vscsifrnt_info *info, uint32_t id)
 				     "grant still in use by backend\n");
 			BUG();
 		}
-		gnttab_end_foreign_access(s->gref[i], 0, 0UL);
+		gnttab_end_foreign_access(s->gref[i], 0, NULL);
 	}
 
 	kfree(s->sg);
@@ -763,8 +763,7 @@ static int scsifront_alloc_ring(struct vscsifrnt_info *info)
 free_irq:
 	unbind_from_irqhandler(info->irq, info);
 free_gnttab:
-	gnttab_end_foreign_access(info->ring_ref, 0,
-				  (unsigned long)info->ring.sring);
+	gnttab_end_foreign_access(info->ring_ref, 0, info->ring.sring);
 
 	return err;
 }
@@ -772,8 +771,7 @@ free_gnttab:
 static void scsifront_free_ring(struct vscsifrnt_info *info)
 {
 	unbind_from_irqhandler(info->irq, info);
-	gnttab_end_foreign_access(info->ring_ref, 0,
-				  (unsigned long)info->ring.sring);
+	gnttab_end_foreign_access(info->ring_ref, 0, info->ring.sring);
 }
 
 static int scsifront_init_ring(struct vscsifrnt_info *info)
diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
index 1189c13..29d88da 100644
--- a/drivers/xen/grant-table.c
+++ b/drivers/xen/grant-table.c
@@ -379,12 +379,12 @@ static void gnttab_add_deferred(grant_ref_t ref, bool readonly,
 }
 
 void gnttab_end_foreign_access(grant_ref_t ref, int readonly,
-			       unsigned long page)
+			       void *page)
 {
 	if (gnttab_end_foreign_access_ref(ref, readonly)) {
 		put_free_entry(ref);
-		if (page != 0)
-			free_page((void *)page);
+		if (page)
+			free_page(page);
 	} else
 		gnttab_add_deferred(ref, readonly,
 				    page ? virt_to_page(page) : NULL);
diff --git a/include/xen/grant_table.h b/include/xen/grant_table.h
index 34b1379..e5bb11a 100644
--- a/include/xen/grant_table.h
+++ b/include/xen/grant_table.h
@@ -98,8 +98,7 @@ int gnttab_end_foreign_access_ref(grant_ref_t ref, int readonly);
  * immediately iff the grant entry is not in use, otherwise it will happen
  * some time later.  page may be 0, in which case no freeing will occur.
  */
-void gnttab_end_foreign_access(grant_ref_t ref, int readonly,
-			       unsigned long page);
+void gnttab_end_foreign_access(grant_ref_t ref, int readonly, void *page);
 
 int gnttab_grant_foreign_transfer(domid_t domid, unsigned long pfn);
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 40/83] nios2: dma_free_coherent(): get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (38 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 39/83] gnttab_end_foreign_access(): switch the last argument to void * Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 41/83] hsi: " Al Viro
                   ` (43 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/nios2/mm/dma-mapping.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/arch/nios2/mm/dma-mapping.c b/arch/nios2/mm/dma-mapping.c
index fa242ab..0195f8f 100644
--- a/arch/nios2/mm/dma-mapping.c
+++ b/arch/nios2/mm/dma-mapping.c
@@ -50,9 +50,7 @@ EXPORT_SYMBOL(dma_alloc_coherent);
 void dma_free_coherent(struct device *dev, size_t size, void *vaddr,
 			dma_addr_t dma_handle)
 {
-	unsigned long addr = (unsigned long) CAC_ADDR((unsigned long) vaddr);
-
-	free_pages((void *)addr, get_order(size));
+	free_pages(CAC_ADDR(vaddr), get_order(size));
 }
 EXPORT_SYMBOL(dma_free_coherent);
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 41/83] hsi: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (39 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 40/83] nios2: dma_free_coherent(): get rid of pointless casts Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 42/83] simserial: " Al Viro
                   ` (42 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/hsi/clients/cmt_speech.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/hsi/clients/cmt_speech.c b/drivers/hsi/clients/cmt_speech.c
index 96d98fc..86ef330 100644
--- a/drivers/hsi/clients/cmt_speech.c
+++ b/drivers/hsi/clients/cmt_speech.c
@@ -54,7 +54,7 @@ struct cs_char {
 	struct list_head	dataind_queue;
 	int			dataind_pending;
 	/* mmap things */
-	unsigned long		mmap_base;
+	void			*mmap_base;
 	unsigned long		mmap_size;
 	spinlock_t		lock;
 	struct fasync_struct	*async_queue;
@@ -101,7 +101,7 @@ struct cs_hsi_iface {
 	/* state exposed to application */
 	struct cs_mmap_config_block	*mmap_cfg;
 
-	unsigned long			mmap_base;
+	void				*mmap_base;
 	unsigned long			mmap_size;
 
 	unsigned int			rx_slot;
@@ -677,7 +677,7 @@ static void cs_hsi_read_on_data(struct cs_hsi_iface *hi)
 	spin_unlock(&hi->lock);
 
 	rxmsg = hi->data_rx_msg;
-	sg_init_one(rxmsg->sgt.sgl, (void *)hi->mmap_base, 0);
+	sg_init_one(rxmsg->sgt.sgl, hi->mmap_base, 0);
 	rxmsg->sgt.nents = 0;
 	rxmsg->complete = cs_hsi_peek_on_data_complete;
 
@@ -996,7 +996,7 @@ error:
 }
 
 static int cs_hsi_start(struct cs_hsi_iface **hi, struct hsi_client *cl,
-			unsigned long mmap_base, unsigned long mmap_size)
+			void *mmap_base, unsigned long mmap_size)
 {
 	int err = 0;
 	struct cs_hsi_iface *hsi_if = kzalloc(sizeof(*hsi_if), GFP_KERNEL);
@@ -1288,7 +1288,7 @@ static int cs_char_mmap(struct file *file, struct vm_area_struct *vma)
 static int cs_char_open(struct inode *unused, struct file *file)
 {
 	int ret = 0;
-	unsigned long p;
+	void *p;
 
 	spin_lock_bh(&cs_char_data.lock);
 	if (cs_char_data.opened) {
@@ -1300,7 +1300,7 @@ static int cs_char_open(struct inode *unused, struct file *file)
 	cs_char_data.dataind_pending = 0;
 	spin_unlock_bh(&cs_char_data.lock);
 
-	p = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	p = get_zeroed_page(GFP_KERNEL);
 	if (!p) {
 		ret = -ENOMEM;
 		goto out2;
@@ -1321,7 +1321,7 @@ static int cs_char_open(struct inode *unused, struct file *file)
 	return 0;
 
 out3:
-	free_page((void *)p);
+	free_page(p);
 out2:
 	spin_lock_bh(&cs_char_data.lock);
 	cs_char_data.opened = 0;
@@ -1352,7 +1352,7 @@ static int cs_char_release(struct inode *unused, struct file *file)
 	cs_hsi_stop(csdata->hi);
 	spin_lock_bh(&csdata->lock);
 	csdata->hi = NULL;
-	free_page((void *)csdata->mmap_base);
+	free_page(csdata->mmap_base);
 	cs_free_char_queue(&csdata->chardev_queue);
 	cs_free_char_queue(&csdata->dataind_queue);
 	csdata->opened = 0;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 42/83] simserial: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (40 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 41/83] hsi: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 43/83] arm64 vdso: " Al Viro
                   ` (41 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/ia64/hp/sim/simserial.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c
index 6e81449..7c3871e 100644
--- a/arch/ia64/hp/sim/simserial.c
+++ b/arch/ia64/hp/sim/simserial.c
@@ -364,19 +364,20 @@ static int activate(struct tty_port *port, struct tty_struct *tty)
 {
 	struct serial_state *state = container_of(port, struct serial_state,
 			port);
-	unsigned long flags, page;
+	unsigned long flags;
+	unsigned char *page;
 	int retval = 0;
 
-	page = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	page = get_zeroed_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
 	local_irq_save(flags);
 
 	if (state->xmit.buf)
-		free_page((void *)page);
+		free_page(page);
 	else
-		state->xmit.buf = (unsigned char *) page;
+		state->xmit.buf = page;
 
 	if (state->irq) {
 		retval = request_irq(state->irq, rs_interrupt_single, 0,
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 43/83] arm64 vdso: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (41 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 42/83] simserial: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 44/83] cris free_init_page(): switch to __free_page() Al Viro
                   ` (40 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

... with two added to cope with flush_icache_range() calling
conventions

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/arm64/kernel/vdso.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c
index 07e4d14..f49e158 100644
--- a/arch/arm64/kernel/vdso.c
+++ b/arch/arm64/kernel/vdso.c
@@ -62,22 +62,21 @@ static int alloc_vectors_page(void)
 
 	int kuser_sz = __kuser_helper_end - __kuser_helper_start;
 	int sigret_sz = __aarch32_sigret_code_end - __aarch32_sigret_code_start;
-	unsigned long vpage;
-
-	vpage = (unsigned long)get_zeroed_page(GFP_ATOMIC);
+	void *vpage = get_zeroed_page(GFP_ATOMIC);
 
 	if (!vpage)
 		return -ENOMEM;
 
 	/* kuser helpers */
-	memcpy((void *)vpage + 0x1000 - kuser_sz, __kuser_helper_start,
+	memcpy(vpage + 0x1000 - kuser_sz, __kuser_helper_start,
 		kuser_sz);
 
 	/* sigreturn code */
-	memcpy((void *)vpage + AARCH32_KERN_SIGRET_CODE_OFFSET,
+	memcpy(vpage + AARCH32_KERN_SIGRET_CODE_OFFSET,
                __aarch32_sigret_code_start, sigret_sz);
 
-	flush_icache_range(vpage, vpage + PAGE_SIZE);
+	flush_icache_range((unsigned long)vpage,
+			   (unsigned long)vpage + PAGE_SIZE);
 	vectors_page[0] = virt_to_page(vpage);
 
 	return 0;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 44/83] cris free_init_page(): switch to __free_page()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (42 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 43/83] arm64 vdso: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 45/83] arm: switch kvm_arm_hyp_stack_page to void * Al Viro
                   ` (39 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/cris/mm/init.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/arch/cris/mm/init.c b/arch/cris/mm/init.c
index dd87022..71a012c 100644
--- a/arch/cris/mm/init.c
+++ b/arch/cris/mm/init.c
@@ -40,9 +40,10 @@ void free_init_pages(const char *what, unsigned long begin, unsigned long end)
 	unsigned long addr;
 
 	for (addr = begin; addr < end; addr += PAGE_SIZE) {
-		ClearPageReserved(virt_to_page(addr));
-		init_page_count(virt_to_page(addr));
-		free_page((void *)addr);
+		struct page *page = virt_to_page(addr);
+		ClearPageReserved(page);
+		init_page_count(page);
+		__free_page(page);
 		totalram_pages++;
 	}
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 45/83] arm: switch kvm_arm_hyp_stack_page to void *
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (43 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 44/83] cris free_init_page(): switch to __free_page() Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 46/83] frv consistent_alloc(): switch page " Al Viro
                   ` (38 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/arm/include/asm/kvm_host.h   |  4 ++--
 arch/arm/kvm/arm.c                | 13 +++++--------
 arch/arm64/include/asm/kvm_host.h |  2 +-
 3 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h
index 6692982..20c51e8 100644
--- a/arch/arm/include/asm/kvm_host.h
+++ b/arch/arm/include/asm/kvm_host.h
@@ -190,7 +190,7 @@ int handle_exit(struct kvm_vcpu *vcpu, struct kvm_run *run,
 
 static inline void __cpu_init_hyp_mode(phys_addr_t boot_pgd_ptr,
 				       phys_addr_t pgd_ptr,
-				       unsigned long hyp_stack_ptr,
+				       void *hyp_stack_ptr,
 				       unsigned long vector_ptr)
 {
 	/*
@@ -211,7 +211,7 @@ static inline void __cpu_init_hyp_mode(phys_addr_t boot_pgd_ptr,
 
 	kvm_call_hyp(NULL, 0, boot_pgd_ptr);
 
-	kvm_call_hyp((void*)hyp_stack_ptr, vector_ptr, pgd_ptr);
+	kvm_call_hyp(hyp_stack_ptr, vector_ptr, pgd_ptr);
 }
 
 static inline int kvm_arch_dev_ioctl_check_extension(long ext)
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
index 08fe183..385bdce 100644
--- a/arch/arm/kvm/arm.c
+++ b/arch/arm/kvm/arm.c
@@ -49,7 +49,7 @@
 __asm__(".arch_extension	virt");
 #endif
 
-static DEFINE_PER_CPU(unsigned long, kvm_arm_hyp_stack_page);
+static DEFINE_PER_CPU(void *, kvm_arm_hyp_stack_page);
 static kvm_cpu_context_t __percpu *kvm_host_cpu_state;
 static unsigned long hyp_default_vectors;
 
@@ -958,8 +958,7 @@ static void cpu_init_hyp_mode(void *dummy)
 {
 	phys_addr_t boot_pgd_ptr;
 	phys_addr_t pgd_ptr;
-	unsigned long hyp_stack_ptr;
-	unsigned long stack_page;
+	void *hyp_stack_ptr, *stack_page;
 	unsigned long vector_ptr;
 
 	/* Switch from the HYP stub to our own HYP init vector */
@@ -1047,9 +1046,7 @@ static int init_hyp_mode(void)
 	 * Allocate stack pages for Hypervisor-mode
 	 */
 	for_each_possible_cpu(cpu) {
-		unsigned long stack_page;
-
-		stack_page = __get_free_page(GFP_KERNEL);
+		void *stack_page = (void *)__get_free_page(GFP_KERNEL);
 		if (!stack_page) {
 			err = -ENOMEM;
 			goto out_free_stack_pages;
@@ -1071,7 +1068,7 @@ static int init_hyp_mode(void)
 	 * Map the Hyp stack pages
 	 */
 	for_each_possible_cpu(cpu) {
-		char *stack_page = (char *)per_cpu(kvm_arm_hyp_stack_page, cpu);
+		char *stack_page = per_cpu(kvm_arm_hyp_stack_page, cpu);
 		err = create_hyp_mappings(stack_page, stack_page + PAGE_SIZE);
 
 		if (err) {
@@ -1136,7 +1133,7 @@ out_free_mappings:
 	free_hyp_pgds();
 out_free_stack_pages:
 	for_each_possible_cpu(cpu)
-		free_page((void *)per_cpu(kvm_arm_hyp_stack_page, cpu));
+		free_page(per_cpu(kvm_arm_hyp_stack_page, cpu));
 out_err:
 	kvm_err("error initializing Hyp mode: %d\n", err);
 	return err;
diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
index a35ce72..e3adc1d 100644
--- a/arch/arm64/include/asm/kvm_host.h
+++ b/arch/arm64/include/asm/kvm_host.h
@@ -236,7 +236,7 @@ struct kvm_vcpu *kvm_mpidr_to_vcpu(struct kvm *kvm, unsigned long mpidr);
 
 static inline void __cpu_init_hyp_mode(phys_addr_t boot_pgd_ptr,
 				       phys_addr_t pgd_ptr,
-				       unsigned long hyp_stack_ptr,
+				       void *hyp_stack_ptr,
 				       unsigned long vector_ptr)
 {
 	/*
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 46/83] frv consistent_alloc(): switch page to void *
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (44 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 45/83] arm: switch kvm_arm_hyp_stack_page to void * Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 47/83] ia64: uncached_add_chunk(): switch to __free_pages() Al Viro
                   ` (37 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/frv/mm/dma-alloc.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/arch/frv/mm/dma-alloc.c b/arch/frv/mm/dma-alloc.c
index c4c19ff..62268e1 100644
--- a/arch/frv/mm/dma-alloc.c
+++ b/arch/frv/mm/dma-alloc.c
@@ -81,7 +81,8 @@ static int map_page(unsigned long va, unsigned long pa, pgprot_t prot)
 void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle)
 {
 	struct vm_struct *area;
-	unsigned long page, va, pa;
+	unsigned long va, pa;
+	void *page;
 	void *ret;
 	int order, err, i;
 
@@ -92,7 +93,7 @@ void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle)
 	size = PAGE_ALIGN(size);
 	order = get_order(size);
 
-	page = __get_free_pages(gfp, order);
+	page = (void *)__get_free_pages(gfp, order);
 	if (!page) {
 		BUG();
 		return NULL;
@@ -101,14 +102,14 @@ void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle)
 	/* allocate some common virtual space to map the new pages */
 	area = get_vm_area(size, VM_ALLOC);
 	if (area == 0) {
-		free_pages((void *)page, order);
+		free_pages(page, order);
 		return NULL;
 	}
 	va = VMALLOC_VMADDR(area->addr);
 	ret = (void *) va;
 
 	/* this gives us the real physical address of the first page */
-	*dma_handle = pa = virt_to_bus((void *) page);
+	*dma_handle = pa = virt_to_bus(page);
 
 	/* set refcount=1 on all pages in an order>0 allocation so that vfree() will actually free
 	 * all pages that were allocated.
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 47/83] ia64: uncached_add_chunk(): switch to __free_pages()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (45 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 46/83] frv consistent_alloc(): switch page " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 48/83] jfs_readdir(): make dirent_buf a pointer Al Viro
                   ` (36 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/ia64/kernel/uncached.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/ia64/kernel/uncached.c b/arch/ia64/kernel/uncached.c
index 9b90526..35494cc 100644
--- a/arch/ia64/kernel/uncached.c
+++ b/arch/ia64/kernel/uncached.c
@@ -166,7 +166,7 @@ failed:
 	for (i = 0; i < (IA64_GRANULE_SIZE / PAGE_SIZE); i++)
 		ClearPageUncached(&page[i]);
 
-	free_pages((void *)c_addr, IA64_GRANULE_SHIFT-PAGE_SHIFT);
+	__free_pages(page, IA64_GRANULE_SHIFT-PAGE_SHIFT);
 	mutex_unlock(&uc_pool->add_chunk_mutex);
 	return -1;
 }
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 48/83] jfs_readdir(): make dirent_buf a pointer
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (46 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 47/83] ia64: uncached_add_chunk(): switch to __free_pages() Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 49/83] get rid of casts in alloc_exact stuff Al Viro
                   ` (35 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 fs/jfs/jfs_dtree.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c
index e585852..56d18de 100644
--- a/fs/jfs/jfs_dtree.c
+++ b/fs/jfs/jfs_dtree.c
@@ -3023,7 +3023,7 @@ int jfs_readdir(struct file *file, struct dir_context *ctx)
 	struct ldtentry *d;
 	struct dtslot *t;
 	int d_namleft, len, outlen;
-	unsigned long dirent_buf;
+	void *dirent_buf;
 	char *name_ptr;
 	u32 dir_index;
 	int do_index = 0;
@@ -3180,8 +3180,8 @@ int jfs_readdir(struct file *file, struct dir_context *ctx)
 		}
 	}
 
-	dirent_buf = __get_free_page(GFP_KERNEL);
-	if (dirent_buf == 0) {
+	dirent_buf = (void *)__get_free_page(GFP_KERNEL);
+	if (!dirent_buf) {
 		DT_PUTPAGE(mp);
 		jfs_warn("jfs_readdir: __get_free_page failed!");
 		ctx->pos = DIREND;
@@ -3198,7 +3198,7 @@ int jfs_readdir(struct file *file, struct dir_context *ctx)
 		for (i = index; i < p->header.nextindex; i++) {
 			d = (struct ldtentry *) & p->slot[stbl[i]];
 
-			if (((long) jfs_dirent + d->namlen + 1) >
+			if (((void *) jfs_dirent + d->namlen + 1) >
 			    (dirent_buf + PAGE_SIZE)) {
 				/* DBCS codepages could overrun dirent_buf */
 				index = i;
@@ -3324,13 +3324,13 @@ skip_one:
 
 		DT_GETPAGE(ip, bn, mp, PSIZE, p, rc);
 		if (rc) {
-			free_page((void *)dirent_buf);
+			free_page(dirent_buf);
 			return rc;
 		}
 	}
 
       out:
-	free_page((void *)dirent_buf);
+	free_page(dirent_buf);
 
 	return rc;
 }
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 49/83] get rid of casts in alloc_exact stuff
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (47 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 48/83] jfs_readdir(): make dirent_buf a pointer Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 50/83] s390 cmm: get rid of pointless casts Al Viro
                   ` (34 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 mm/page_alloc.c | 27 ++++++++++++---------------
 1 file changed, 12 insertions(+), 15 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index aa37489..a1aa8eb 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3449,20 +3449,20 @@ void free_kmem_pages(unsigned long addr, unsigned int order)
 	}
 }
 
-static void *make_alloc_exact(unsigned long addr, unsigned int order,
+static void *make_alloc_exact(void *addr, unsigned int order,
 		size_t size)
 {
 	if (addr) {
-		unsigned long alloc_end = addr + (PAGE_SIZE << order);
-		unsigned long used = addr + PAGE_ALIGN(size);
+		void *alloc_end = addr + (PAGE_SIZE << order);
+		void *used = addr + PAGE_ALIGN(size);
 
-		split_page(virt_to_page((void *)addr), order);
+		split_page(virt_to_page(addr), order);
 		while (used < alloc_end) {
-			free_page((void *)used);
+			free_page(used);
 			used += PAGE_SIZE;
 		}
 	}
-	return (void *)addr;
+	return addr;
 }
 
 /**
@@ -3481,9 +3481,7 @@ static void *make_alloc_exact(unsigned long addr, unsigned int order,
 void *alloc_pages_exact(size_t size, gfp_t gfp_mask)
 {
 	unsigned int order = get_order(size);
-	unsigned long addr;
-
-	addr = __get_free_pages(gfp_mask, order);
+	void *addr = (void *)__get_free_pages(gfp_mask, order);
 	return make_alloc_exact(addr, order, size);
 }
 EXPORT_SYMBOL(alloc_pages_exact);
@@ -3504,7 +3502,7 @@ void * __meminit alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask)
 	struct page *p = alloc_pages_node(nid, gfp_mask, order);
 	if (!p)
 		return NULL;
-	return make_alloc_exact((unsigned long)page_address(p), order, size);
+	return make_alloc_exact(page_address(p), order, size);
 }
 
 /**
@@ -3516,12 +3514,11 @@ void * __meminit alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask)
  */
 void free_pages_exact(void *virt, size_t size)
 {
-	unsigned long addr = (unsigned long)virt;
-	unsigned long end = addr + PAGE_ALIGN(size);
+	void *end = virt + PAGE_ALIGN(size);
 
-	while (addr < end) {
-		free_page((void *)addr);
-		addr += PAGE_SIZE;
+	while (virt < end) {
+		free_page(virt);
+		virt += PAGE_SIZE;
 	}
 }
 EXPORT_SYMBOL(free_pages_exact);
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 50/83] s390 cmm: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (48 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 49/83] get rid of casts in alloc_exact stuff Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 51/83] microblaze consistent_alloc(): " Al Viro
                   ` (33 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/s390/mm/cmm.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/arch/s390/mm/cmm.c b/arch/s390/mm/cmm.c
index b0ca6af..e5879ba 100644
--- a/arch/s390/mm/cmm.c
+++ b/arch/s390/mm/cmm.c
@@ -38,7 +38,7 @@ MODULE_PARM_DESC(sender,
 struct cmm_page_array {
 	struct cmm_page_array *next;
 	unsigned long index;
-	unsigned long pages[CMM_NR_PAGES];
+	void *pages[CMM_NR_PAGES];
 };
 
 static long cmm_pages;
@@ -64,10 +64,10 @@ static long cmm_alloc_pages(long nr, long *counter,
 			    struct cmm_page_array **list)
 {
 	struct cmm_page_array *pa, *npa;
-	unsigned long addr;
+	void *addr;
 
 	while (nr) {
-		addr = __get_free_page(GFP_NOIO);
+		addr = (void *)__get_free_page(GFP_NOIO);
 		if (!addr)
 			break;
 		spin_lock(&cmm_lock);
@@ -78,7 +78,7 @@ static long cmm_alloc_pages(long nr, long *counter,
 			npa = (struct cmm_page_array *)
 				__get_free_page(GFP_NOIO);
 			if (!npa) {
-				free_page((void *)addr);
+				free_page(addr);
 				break;
 			}
 			spin_lock(&cmm_lock);
@@ -91,7 +91,7 @@ static long cmm_alloc_pages(long nr, long *counter,
 			} else
 				free_page(npa);
 		}
-		diag10_range(addr >> PAGE_SHIFT, 1);
+		diag10_range((unsigned long)addr >> PAGE_SHIFT, 1);
 		pa->pages[pa->index++] = addr;
 		(*counter)++;
 		spin_unlock(&cmm_lock);
@@ -103,7 +103,7 @@ static long cmm_alloc_pages(long nr, long *counter,
 static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
 {
 	struct cmm_page_array *pa;
-	unsigned long addr;
+	void *addr;
 
 	spin_lock(&cmm_lock);
 	pa = *list;
@@ -116,7 +116,7 @@ static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
 			free_page(*list);
 			*list = pa;
 		}
-		free_page((void *)addr);
+		free_page(addr);
 		(*counter)--;
 		nr--;
 	}
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 51/83] microblaze consistent_alloc(): get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (49 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 50/83] s390 cmm: get rid of pointless casts Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 52/83] devm_{get_}free_pages(): switch to pointers Al Viro
                   ` (32 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/microblaze/mm/consistent.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/arch/microblaze/mm/consistent.c b/arch/microblaze/mm/consistent.c
index a4b587a..bdeb2cb 100644
--- a/arch/microblaze/mm/consistent.c
+++ b/arch/microblaze/mm/consistent.c
@@ -61,8 +61,8 @@
  */
 void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle)
 {
-	unsigned long order, vaddr;
-	void *ret;
+	unsigned long order;
+	void *vaddr, *ret;
 	unsigned int i, err = 0;
 	struct page *page, *end;
 
@@ -79,7 +79,7 @@ void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle)
 	size = PAGE_ALIGN(size);
 	order = get_order(size);
 
-	vaddr = __get_free_pages(gfp, order);
+	vaddr = (void *)__get_free_pages(gfp, order);
 	if (!vaddr)
 		return NULL;
 
@@ -87,11 +87,11 @@ void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle)
 	 * we need to ensure that there are no cachelines in use,
 	 * or worse dirty in this area.
 	 */
-	flush_dcache_range(virt_to_phys((void *)vaddr),
-					virt_to_phys((void *)vaddr) + size);
+	flush_dcache_range(virt_to_phys(vaddr),
+					virt_to_phys(vaddr) + size);
 
 #ifndef CONFIG_MMU
-	ret = (void *)vaddr;
+	ret = vaddr;
 	/*
 	 * Here's the magic!  Note if the uncached shadow is not implemented,
 	 * it's up to the calling code to also test that condition and make
@@ -110,14 +110,14 @@ void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle)
 	/* Allocate some common virtual space to map the new pages. */
 	area = get_vm_area(size, VM_ALLOC);
 	if (!area) {
-		free_pages((void *)vaddr, order);
+		free_pages(vaddr, order);
 		return NULL;
 	}
 	va = (unsigned long) area->addr;
 	ret = (void *)va;
 
 	/* This gives us the real physical address of the first page. */
-	*dma_handle = pa = __virt_to_phys(vaddr);
+	*dma_handle = pa = __pa(vaddr);
 #endif
 
 	/*
@@ -148,7 +148,7 @@ void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle)
 	}
 
 	if (err) {
-		free_pages((void *)vaddr, order);
+		free_pages(vaddr, order);
 		return NULL;
 	}
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 52/83] devm_{get_}free_pages(): switch to pointers
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (50 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 51/83] microblaze consistent_alloc(): " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 53/83] cavium: (partially) get rid of cargo-culting in allocator Al Viro
                   ` (31 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

the only caller of devm_get_free_pages() casts anyway

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/base/devres.c                 | 14 ++++++--------
 drivers/char/xillybus/xillybus_core.c |  2 +-
 include/linux/device.h                |  4 ++--
 3 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/base/devres.c b/drivers/base/devres.c
index 854f7ae..414ac33 100644
--- a/drivers/base/devres.c
+++ b/drivers/base/devres.c
@@ -911,7 +911,7 @@ void *devm_kmemdup(struct device *dev, const void *src, size_t len, gfp_t gfp)
 EXPORT_SYMBOL_GPL(devm_kmemdup);
 
 struct pages_devres {
-	unsigned long addr;
+	void *addr;
 	unsigned int order;
 };
 
@@ -927,7 +927,7 @@ static void devm_pages_release(struct device *dev, void *res)
 {
 	struct pages_devres *devres = res;
 
-	free_pages((void *)devres->addr, devres->order);
+	free_pages(devres->addr, devres->order);
 }
 
 /**
@@ -943,13 +943,11 @@ static void devm_pages_release(struct device *dev, void *res)
  * Address of allocated memory on success, 0 on failure.
  */
 
-unsigned long devm_get_free_pages(struct device *dev,
+void *devm_get_free_pages(struct device *dev,
 				  gfp_t gfp_mask, unsigned int order)
 {
 	struct pages_devres *devres;
-	unsigned long addr;
-
-	addr = __get_free_pages(gfp_mask, order);
+	void *addr = (void *)__get_free_pages(gfp_mask, order);
 
 	if (unlikely(!addr))
 		return 0;
@@ -957,7 +955,7 @@ unsigned long devm_get_free_pages(struct device *dev,
 	devres = devres_alloc(devm_pages_release,
 			      sizeof(struct pages_devres), GFP_KERNEL);
 	if (unlikely(!devres)) {
-		free_pages((void *)addr, order);
+		free_pages(addr, order);
 		return 0;
 	}
 
@@ -977,7 +975,7 @@ EXPORT_SYMBOL_GPL(devm_get_free_pages);
  * Free memory allocated with devm_get_free_pages(). Unlike free_pages,
  * there is no need to supply the @order.
  */
-void devm_free_pages(struct device *dev, unsigned long addr)
+void devm_free_pages(struct device *dev, void *addr)
 {
 	struct pages_devres devres = { .addr = addr };
 
diff --git a/drivers/char/xillybus/xillybus_core.c b/drivers/char/xillybus/xillybus_core.c
index 77d6c12..28cd936 100644
--- a/drivers/char/xillybus/xillybus_core.c
+++ b/drivers/char/xillybus/xillybus_core.c
@@ -359,7 +359,7 @@ static int xilly_get_dma_buffers(struct xilly_endpoint *ep,
 				allocorder++;
 			}
 
-			s->salami = (void *) devm_get_free_pages(
+			s->salami = devm_get_free_pages(
 				dev,
 				GFP_KERNEL | __GFP_DMA32 | __GFP_ZERO,
 				allocorder);
diff --git a/include/linux/device.h b/include/linux/device.h
index b8f411b..24d957d 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -671,9 +671,9 @@ extern char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp);
 extern void *devm_kmemdup(struct device *dev, const void *src, size_t len,
 			  gfp_t gfp);
 
-extern unsigned long devm_get_free_pages(struct device *dev,
+extern void *devm_get_free_pages(struct device *dev,
 					 gfp_t gfp_mask, unsigned int order);
-extern void devm_free_pages(struct device *dev, unsigned long addr);
+extern void devm_free_pages(struct device *dev, void *addr);
 
 void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res);
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 53/83] cavium: (partially) get rid of cargo-culting in allocator
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (51 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 52/83] devm_{get_}free_pages(): switch to pointers Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 54/83] um: store stacks as pointers Al Viro
                   ` (30 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

AFAICS, it's a rudiment of a different allocator used at some earlier
point; __get_free_pages() *never* returns a pointer that wouldn't
be at least 8 bytes aligned - we don't support architectures with
4-byte pages, TYVM...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/net/ethernet/cavium/liquidio/octeon_droq.c |  4 +---
 drivers/net/ethernet/cavium/liquidio/octeon_droq.h |  3 ---
 drivers/net/ethernet/cavium/liquidio/octeon_main.h | 17 ++---------------
 3 files changed, 3 insertions(+), 21 deletions(-)

diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_droq.c b/drivers/net/ethernet/cavium/liquidio/octeon_droq.c
index 4dba86e..7b0e1ac 100644
--- a/drivers/net/ethernet/cavium/liquidio/octeon_droq.c
+++ b/drivers/net/ethernet/cavium/liquidio/octeon_droq.c
@@ -218,10 +218,9 @@ int octeon_delete_droq(struct octeon_device *oct, u32 q_no)
 	octeon_droq_destroy_ring_buffers(oct, droq);
 	vfree(droq->recv_buf_list);
 
-	if (droq->info_base_addr)
+	if (droq->info_list)
 		cnnic_free_aligned_dma(oct->pci_dev, droq->info_list,
 				       droq->info_alloc_size,
-				       droq->info_base_addr,
 				       droq->info_list_dma);
 
 	if (droq->desc_ring)
@@ -286,7 +285,6 @@ int octeon_init_droq(struct octeon_device *oct,
 		cnnic_alloc_aligned_dma(oct->pci_dev,
 					(droq->max_count * OCT_DROQ_INFO_SIZE),
 					&droq->info_alloc_size,
-					&droq->info_base_addr,
 					&droq->info_list_dma);
 
 	if (!droq->info_list) {
diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_droq.h b/drivers/net/ethernet/cavium/liquidio/octeon_droq.h
index 7940cce..95a145c 100644
--- a/drivers/net/ethernet/cavium/liquidio/octeon_droq.h
+++ b/drivers/net/ethernet/cavium/liquidio/octeon_droq.h
@@ -306,9 +306,6 @@ struct octeon_droq {
 	/** DMA mapped address of the DROQ descriptor ring. */
 	size_t desc_ring_dma;
 
-	/** Info ptr list are allocated at this virtual address. */
-	size_t info_base_addr;
-
 	/** DMA mapped address of the info list */
 	size_t info_list_dma;
 
diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_main.h b/drivers/net/ethernet/cavium/liquidio/octeon_main.h
index 61dbccc..b6a90a9 100644
--- a/drivers/net/ethernet/cavium/liquidio/octeon_main.h
+++ b/drivers/net/ethernet/cavium/liquidio/octeon_main.h
@@ -129,7 +129,6 @@ static inline void *
 cnnic_alloc_aligned_dma(struct pci_dev *pci_dev,
 			u32 size,
 			u32 *alloc_size,
-			size_t *orig_ptr,
 			size_t *dma_addr __attribute__((unused)))
 {
 	int retries = 0;
@@ -140,27 +139,15 @@ cnnic_alloc_aligned_dma(struct pci_dev *pci_dev,
 		ptr =
 		    (void *)__get_free_pages(GFP_KERNEL,
 					     get_order(size));
-		if ((unsigned long)ptr & 0x07) {
-			free_pages(ptr, get_order(size));
-			ptr = NULL;
-			/* Increment the size required if the first
-			 * attempt failed.
-			 */
-			if (!retries)
-				size += 7;
-		}
 		retries++;
 	} while ((retries <= OCTEON_MAX_ALLOC_RETRIES) && !ptr);
 
 	*alloc_size = size;
-	*orig_ptr = (unsigned long)ptr;
-	if ((unsigned long)ptr & 0x07)
-		ptr = (void *)(((unsigned long)ptr + 7) & ~(7UL));
 	return ptr;
 }
 
-#define cnnic_free_aligned_dma(pci_dev, ptr, size, orig_ptr, dma_addr) \
-		free_pages((void *)orig_ptr, get_order(size))
+#define cnnic_free_aligned_dma(pci_dev, ptr, size, dma_addr) \
+		free_pages(ptr, get_order(size))
 
 static inline void
 sleep_cond(wait_queue_head_t *wait_queue, int *condition)
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 54/83] um: store stacks as pointers
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (52 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 53/83] cavium: (partially) get rid of cargo-culting in allocator Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 55/83] sh: get rid of pointless casts Al Viro
                   ` (29 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/um/drivers/chan_user.c         |  6 +++---
 arch/um/drivers/chan_user.h         |  2 +-
 arch/um/drivers/line.c              |  8 ++++----
 arch/um/drivers/ubd.h               |  2 +-
 arch/um/drivers/ubd_kern.c          |  2 +-
 arch/um/drivers/ubd_user.c          |  4 ++--
 arch/um/include/shared/kern_util.h  |  4 ++--
 arch/um/include/shared/os.h         |  6 +++---
 arch/um/include/shared/skas/mm_id.h |  2 +-
 arch/um/include/shared/skas/skas.h  |  2 +-
 arch/um/kernel/process.c            | 11 ++++-------
 arch/um/kernel/skas/mmu.c           | 17 ++++++++---------
 arch/um/kernel/skas/process.c       |  4 ++--
 arch/um/os-Linux/aio.c              |  2 +-
 arch/um/os-Linux/helper.c           | 14 +++++++-------
 arch/um/os-Linux/sigio.c            |  2 +-
 arch/um/os-Linux/skas/process.c     | 19 +++++++++----------
 17 files changed, 51 insertions(+), 56 deletions(-)

diff --git a/arch/um/drivers/chan_user.c b/arch/um/drivers/chan_user.c
index 3fd7c3e..bbda889 100644
--- a/arch/um/drivers/chan_user.c
+++ b/arch/um/drivers/chan_user.c
@@ -217,7 +217,7 @@ static int winch_thread(void *arg)
 }
 
 static int winch_tramp(int fd, struct tty_port *port, int *fd_out,
-		       unsigned long *stack_out)
+		       void **stack_out)
 {
 	struct winch_data data;
 	int fds[2], n, err;
@@ -273,7 +273,7 @@ static int winch_tramp(int fd, struct tty_port *port, int *fd_out,
 
 void register_winch(int fd, struct tty_port *port)
 {
-	unsigned long stack;
+	void *stack;
 	int pid, thread, count, thread_fd = -1;
 	char c = 1;
 
@@ -282,7 +282,7 @@ void register_winch(int fd, struct tty_port *port)
 
 	pid = tcgetpgrp(fd);
 	if (is_skas_winch(pid, fd, port)) {
-		register_winch_irq(-1, fd, -1, port, 0);
+		register_winch_irq(-1, fd, -1, port, NULL);
 		return;
 	}
 
diff --git a/arch/um/drivers/chan_user.h b/arch/um/drivers/chan_user.h
index 03f1b56..9cc900b 100644
--- a/arch/um/drivers/chan_user.h
+++ b/arch/um/drivers/chan_user.h
@@ -41,7 +41,7 @@ extern void generic_free(void *data);
 struct tty_port;
 extern void register_winch(int fd,  struct tty_port *port);
 extern void register_winch_irq(int fd, int tty_fd, int pid,
-			       struct tty_port *port, unsigned long stack);
+			       struct tty_port *port, void *stack);
 
 #define __channel_help(fn, prefix) \
 __uml_help(fn, prefix "[0-9]*=<channel description>\n" \
diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c
index 6208702..ae8a5b1 100644
--- a/arch/um/drivers/line.c
+++ b/arch/um/drivers/line.c
@@ -598,7 +598,7 @@ struct winch {
 	int tty_fd;
 	int pid;
 	struct tty_port *port;
-	unsigned long stack;
+	void *stack;
 	struct work_struct work;
 };
 
@@ -609,7 +609,7 @@ static void __free_winch(struct work_struct *work)
 
 	if (winch->pid != -1)
 		os_kill_process(winch->pid, 1);
-	if (winch->stack != 0)
+	if (winch->stack)
 		free_stack(winch->stack, 0);
 	kfree(winch);
 }
@@ -672,7 +672,7 @@ static irqreturn_t winch_interrupt(int irq, void *data)
 }
 
 void register_winch_irq(int fd, int tty_fd, int pid, struct tty_port *port,
-			unsigned long stack)
+			void *stack)
 {
 	struct winch *winch;
 
@@ -707,7 +707,7 @@ void register_winch_irq(int fd, int tty_fd, int pid, struct tty_port *port,
  cleanup:
 	os_kill_process(pid, 1);
 	os_close_file(fd);
-	if (stack != 0)
+	if (stack)
 		free_stack(stack, 0);
 }
 
diff --git a/arch/um/drivers/ubd.h b/arch/um/drivers/ubd.h
index 3b48cd2..5507e2c 100644
--- a/arch/um/drivers/ubd.h
+++ b/arch/um/drivers/ubd.h
@@ -7,7 +7,7 @@
 #ifndef __UM_UBD_USER_H
 #define __UM_UBD_USER_H
 
-extern int start_io_thread(unsigned long sp, int *fds_out);
+extern int start_io_thread(void *sp, int *fds_out);
 extern int io_thread(void *arg);
 extern int kernel_fd;
 
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c
index e8ab93c..e88fe7c 100644
--- a/arch/um/drivers/ubd_kern.c
+++ b/arch/um/drivers/ubd_kern.c
@@ -1082,7 +1082,7 @@ static int __init ubd_init(void)
 late_initcall(ubd_init);
 
 static int __init ubd_driver_init(void){
-	unsigned long stack;
+	void *stack;
 	int err;
 
 	/* Set by CONFIG_BLK_DEV_UBD_SYNC or ubd=sync.*/
diff --git a/arch/um/drivers/ubd_user.c b/arch/um/drivers/ubd_user.c
index e376f9b..47791d4 100644
--- a/arch/um/drivers/ubd_user.c
+++ b/arch/um/drivers/ubd_user.c
@@ -21,7 +21,7 @@
 #include "ubd.h"
 #include <os.h>
 
-int start_io_thread(unsigned long sp, int *fd_out)
+int start_io_thread(void *sp, int *fd_out)
 {
 	int pid, fds[2], err;
 
@@ -40,7 +40,7 @@ int start_io_thread(unsigned long sp, int *fd_out)
 		goto out_close;
 	}
 
-	pid = clone(io_thread, (void *) sp, CLONE_FILES | CLONE_VM, NULL);
+	pid = clone(io_thread, sp, CLONE_FILES | CLONE_VM, NULL);
 	if(pid < 0){
 		err = -errno;
 		printk("start_io_thread - clone failed : errno = %d\n", errno);
diff --git a/arch/um/include/shared/kern_util.h b/arch/um/include/shared/kern_util.h
index 35ab97e..886e362 100644
--- a/arch/um/include/shared/kern_util.h
+++ b/arch/um/include/shared/kern_util.h
@@ -19,8 +19,8 @@ extern int kmalloc_ok;
 #define UML_ROUND_UP(addr) \
 	((((unsigned long) addr) + PAGE_SIZE - 1) & PAGE_MASK)
 
-extern unsigned long alloc_stack(int order, int atomic);
-extern void free_stack(unsigned long stack, int order);
+extern void *alloc_stack(int order, int atomic);
+extern void free_stack(void *stack, int order);
 
 struct pt_regs;
 extern void do_signal(struct pt_regs *regs);
diff --git a/arch/um/include/shared/os.h b/arch/um/include/shared/os.h
index 868e6c3..fc47885 100644
--- a/arch/um/include/shared/os.h
+++ b/arch/um/include/shared/os.h
@@ -210,7 +210,7 @@ extern int execvp_noalloc(char *buf, const char *file, char *const argv[]);
 /* helper.c */
 extern int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv);
 extern int run_helper_thread(int (*proc)(void *), void *arg,
-			     unsigned int flags, unsigned long *stack_out);
+			     unsigned int flags, void **stack_out);
 extern int helper_wait(int pid);
 
 
@@ -270,8 +270,8 @@ extern int protect(struct mm_id * mm_idp, unsigned long addr,
 
 /* skas/process.c */
 extern int is_skas_winch(int pid, int fd, void *data);
-extern int start_userspace(unsigned long stub_stack);
-extern int copy_context_skas0(unsigned long stack, int pid);
+extern int start_userspace(void *stub_stack);
+extern int copy_context_skas0(void *stack, int pid);
 extern void userspace(struct uml_pt_regs *regs);
 extern int map_stub_pages(int fd, unsigned long code, unsigned long data,
 			  unsigned long stack);
diff --git a/arch/um/include/shared/skas/mm_id.h b/arch/um/include/shared/skas/mm_id.h
index 48dd098..b75c535 100644
--- a/arch/um/include/shared/skas/mm_id.h
+++ b/arch/um/include/shared/skas/mm_id.h
@@ -11,7 +11,7 @@ struct mm_id {
 		int mm_fd;
 		int pid;
 	} u;
-	unsigned long stack;
+	void *stack;
 };
 
 #endif
diff --git a/arch/um/include/shared/skas/skas.h b/arch/um/include/shared/skas/skas.h
index 911f3c4..689d0c6 100644
--- a/arch/um/include/shared/skas/skas.h
+++ b/arch/um/include/shared/skas/skas.h
@@ -14,6 +14,6 @@ extern int user_thread(unsigned long stack, int flags);
 extern void new_thread_handler(void);
 extern void handle_syscall(struct uml_pt_regs *regs);
 extern long execute_syscall_skas(void *r);
-extern unsigned long current_stub_stack(void);
+extern void *current_stub_stack(void);
 
 #endif
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c
index b77685b..69c8d56 100644
--- a/arch/um/kernel/process.c
+++ b/arch/um/kernel/process.c
@@ -55,21 +55,18 @@ int pid_to_processor_id(int pid)
 	return -1;
 }
 
-void free_stack(unsigned long stack, int order)
+void free_stack(void *stack, int order)
 {
-	free_pages((void *)stack, order);
+	free_pages(stack, order);
 }
 
-unsigned long alloc_stack(int order, int atomic)
+void *alloc_stack(int order, int atomic)
 {
-	unsigned long page;
 	gfp_t flags = GFP_KERNEL;
 
 	if (atomic)
 		flags = GFP_ATOMIC;
-	page = __get_free_pages(flags, order);
-
-	return page;
+	return (void *)__get_free_pages(flags, order);
 }
 
 static inline void set_current(struct task_struct *task)
diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c
index 6898b23..a0e5758 100644
--- a/arch/um/kernel/skas/mmu.c
+++ b/arch/um/kernel/skas/mmu.c
@@ -15,7 +15,7 @@
 #include <skas.h>
 
 static int init_stub_pte(struct mm_struct *mm, unsigned long proc,
-			 unsigned long kernel)
+			 void *kernel)
 {
 	pgd_t *pgd;
 	pud_t *pud;
@@ -51,11 +51,11 @@ int init_new_context(struct task_struct *task, struct mm_struct *mm)
 {
  	struct mm_context *from_mm = NULL;
 	struct mm_context *to_mm = &mm->context;
-	unsigned long stack = 0;
+	void *stack;
 	int ret = -ENOMEM;
 
-	stack = (unsigned long)get_zeroed_page(GFP_KERNEL);
-	if (stack == 0)
+	stack = get_zeroed_page(GFP_KERNEL);
+	if (!stack)
 		goto out;
 
 	to_mm->id.stack = stack;
@@ -84,8 +84,8 @@ int init_new_context(struct task_struct *task, struct mm_struct *mm)
 	return 0;
 
  out_free:
-	if (to_mm->id.stack != 0)
-		free_page((void *)to_mm->id.stack);
+	if (to_mm->id.stack)
+		free_page(to_mm->id.stack);
  out:
 	return ret;
 }
@@ -94,8 +94,7 @@ void uml_setup_stubs(struct mm_struct *mm)
 {
 	int err, ret;
 
-	ret = init_stub_pte(mm, STUB_CODE,
-			    (unsigned long) __syscall_stub_start);
+	ret = init_stub_pte(mm, STUB_CODE, __syscall_stub_start);
 	if (ret)
 		goto out;
 
@@ -153,6 +152,6 @@ void destroy_context(struct mm_struct *mm)
 	}
 	os_kill_ptraced_process(mmu->id.u.pid, 1);
 
-	free_page((void *)mmu->id.stack);
+	free_page(mmu->id.stack);
 	free_ldt(mmu);
 }
diff --git a/arch/um/kernel/skas/process.c b/arch/um/kernel/skas/process.c
index 527fa58..1a2d485 100644
--- a/arch/um/kernel/skas/process.c
+++ b/arch/um/kernel/skas/process.c
@@ -43,10 +43,10 @@ int __init start_uml(void)
 				 &init_task.thread.switch_buf);
 }
 
-unsigned long current_stub_stack(void)
+void *current_stub_stack(void)
 {
 	if (current->mm == NULL)
-		return 0;
+		return NULL;
 
 	return current->mm->context.id.stack;
 }
diff --git a/arch/um/os-Linux/aio.c b/arch/um/os-Linux/aio.c
index 014eb35..e029471 100644
--- a/arch/um/os-Linux/aio.c
+++ b/arch/um/os-Linux/aio.c
@@ -164,7 +164,7 @@ static int do_not_aio(struct aio_thread_req *req)
 static int aio_req_fd_r = -1;
 static int aio_req_fd_w = -1;
 static int aio_pid = -1;
-static unsigned long aio_stack;
+static void *aio_stack;
 
 static int not_aio_thread(void *arg)
 {
diff --git a/arch/um/os-Linux/helper.c b/arch/um/os-Linux/helper.c
index 3f02d42..8653db7 100644
--- a/arch/um/os-Linux/helper.c
+++ b/arch/um/os-Linux/helper.c
@@ -42,11 +42,11 @@ static int helper_child(void *arg)
 int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv)
 {
 	struct helper_data data;
-	unsigned long stack, sp;
+	void *stack, *sp;
 	int pid, fds[2], ret, n;
 
 	stack = alloc_stack(0, __cant_sleep());
-	if (stack == 0)
+	if (!stack)
 		return -ENOMEM;
 
 	ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fds);
@@ -71,7 +71,7 @@ int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv)
 	data.fd = fds[1];
 	data.buf = __cant_sleep() ? uml_kmalloc(PATH_MAX, UM_GFP_ATOMIC) :
 					uml_kmalloc(PATH_MAX, UM_GFP_KERNEL);
-	pid = clone(helper_child, (void *) sp, CLONE_VM, &data);
+	pid = clone(helper_child, sp, CLONE_VM, &data);
 	if (pid < 0) {
 		ret = -errno;
 		printk(UM_KERN_ERR "run_helper : clone failed, errno = %d\n",
@@ -111,17 +111,17 @@ out_free:
 }
 
 int run_helper_thread(int (*proc)(void *), void *arg, unsigned int flags,
-		      unsigned long *stack_out)
+		      void **stack_out)
 {
-	unsigned long stack, sp;
+	void *stack, *sp;
 	int pid, status, err;
 
 	stack = alloc_stack(0, __cant_sleep());
-	if (stack == 0)
+	if (!stack)
 		return -ENOMEM;
 
 	sp = stack + UM_KERN_PAGE_SIZE - sizeof(void *);
-	pid = clone(proc, (void *) sp, flags, arg);
+	pid = clone(proc, sp, flags, arg);
 	if (pid < 0) {
 		err = -errno;
 		printk(UM_KERN_ERR "run_helper_thread : clone failed, "
diff --git a/arch/um/os-Linux/sigio.c b/arch/um/os-Linux/sigio.c
index 46e762f..a5f8fa5 100644
--- a/arch/um/os-Linux/sigio.c
+++ b/arch/um/os-Linux/sigio.c
@@ -22,7 +22,7 @@
  * exitcall.
  */
 static int write_sigio_pid = -1;
-static unsigned long write_sigio_stack;
+static void *write_sigio_stack;
 
 /*
  * These arrays are initialized before the sigio thread is started, and
diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c
index b856c66..ec32886 100644
--- a/arch/um/os-Linux/skas/process.c
+++ b/arch/um/os-Linux/skas/process.c
@@ -85,7 +85,7 @@ bad_wait:
 	fatal_sigsegv();
 }
 
-extern unsigned long current_stub_stack(void);
+extern void *current_stub_stack(void);
 
 static void get_skas_faultinfo(int pid, struct faultinfo *fi)
 {
@@ -110,7 +110,7 @@ static void get_skas_faultinfo(int pid, struct faultinfo *fi)
 	 * faultinfo is prepared by the stub-segv-handler at start of
 	 * the stub stack page. We just have to copy it.
 	 */
-	memcpy(fi, (void *)current_stub_stack(), sizeof(*fi));
+	memcpy(fi, current_stub_stack(), sizeof(*fi));
 
 	err = put_fp_registers(pid, fpregs);
 	if (err < 0) {
@@ -245,10 +245,9 @@ static int userspace_tramp(void *stack)
 #define NR_CPUS 1
 int userspace_pid[NR_CPUS];
 
-int start_userspace(unsigned long stub_stack)
+int start_userspace(void *stub_stack)
 {
-	void *stack;
-	unsigned long sp;
+	void *stack, *sp;
 	int pid, status, n, flags, err;
 
 	stack = mmap(NULL, UM_KERN_PAGE_SIZE,
@@ -261,11 +260,11 @@ int start_userspace(unsigned long stub_stack)
 		return err;
 	}
 
-	sp = (unsigned long) stack + UM_KERN_PAGE_SIZE - sizeof(void *);
+	sp = stack + UM_KERN_PAGE_SIZE - sizeof(void *);
 
 	flags = CLONE_FILES | SIGCHLD;
 
-	pid = clone(userspace_tramp, (void *) sp, flags, (void *) stub_stack);
+	pid = clone(userspace_tramp, sp, flags, stub_stack);
 	if (pid < 0) {
 		err = -errno;
 		printk(UM_KERN_ERR "start_userspace : clone failed, "
@@ -439,14 +438,14 @@ static int __init init_thread_regs(void)
 
 __initcall(init_thread_regs);
 
-int copy_context_skas0(unsigned long new_stack, int pid)
+int copy_context_skas0(void *new_stack, int pid)
 {
 	int err;
-	unsigned long current_stack = current_stub_stack();
+	void *current_stack = current_stub_stack();
 	struct stub_data *data = (struct stub_data *) current_stack;
 	struct stub_data *child_data = (struct stub_data *) new_stack;
 	unsigned long long new_offset;
-	int new_fd = phys_mapping(to_phys((void *)new_stack), &new_offset);
+	int new_fd = phys_mapping(to_phys(new_stack), &new_offset);
 
 	/*
 	 * prepare offset and fd of child's stack as argument for parent's
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 55/83] sh: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (53 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 54/83] um: store stacks as pointers Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 56/83] amd_gart_64: " Al Viro
                   ` (28 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/sh/boards/mach-hp6xx/pm.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/arch/sh/boards/mach-hp6xx/pm.c b/arch/sh/boards/mach-hp6xx/pm.c
index 1a8aacd..b792c76 100644
--- a/arch/sh/boards/mach-hp6xx/pm.c
+++ b/arch/sh/boards/mach-hp6xx/pm.c
@@ -41,7 +41,8 @@ static void pm_enter(void)
 {
 	u8 stbcr, csr;
 	u16 frqcr, mcr;
-	u32 vbr_new, vbr_old;
+	void *vbr_new;
+	u32 vbr_old;
 
 	set_bl_bit();
 
@@ -68,9 +69,9 @@ static void pm_enter(void)
 
 	/* set interrupt handler */
 	asm volatile("stc vbr, %0" : "=r" (vbr_old));
-	vbr_new = (unsigned long)get_zeroed_page(GFP_ATOMIC);
+	vbr_new = get_zeroed_page(GFP_ATOMIC);
 	udelay(50);
-	memcpy((void*)(vbr_new + INTR_OFFSET),
+	memcpy(vbr_new + INTR_OFFSET,
 	       &wakeup_start, &wakeup_end - &wakeup_start);
 	asm volatile("ldc %0, vbr" : : "r" (vbr_new));
 
@@ -81,7 +82,7 @@ static void pm_enter(void)
 
 	asm volatile("ldc %0, vbr" : : "r" (vbr_old));
 
-	free_page((void *)vbr_new);
+	free_page(vbr_new);
 
 	/* enable PLL1 */
 	frqcr = __raw_readw(FRQCR);
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 56/83] amd_gart_64: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (54 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 55/83] sh: get rid of pointless casts Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 57/83] iwlegacy: " Al Viro
                   ` (27 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/x86/kernel/amd_gart_64.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c
index 2ef2933..94da9dd 100644
--- a/arch/x86/kernel/amd_gart_64.c
+++ b/arch/x86/kernel/amd_gart_64.c
@@ -736,7 +736,7 @@ int __init gart_iommu_init(void)
 	unsigned long iommu_start;
 	unsigned long aper_base, aper_size;
 	unsigned long start_pfn, end_pfn;
-	unsigned long scratch;
+	void *scratch;
 	long i;
 
 	if (!amd_nb_has_feature(AMD_NB_GART))
@@ -841,7 +841,7 @@ int __init gart_iommu_init(void)
 	 * Any prefetches that hit unmapped entries won't get an bus abort
 	 * then. (P2P bridge may be prefetching on DMA reads).
 	 */
-	scratch = (unsigned long)get_zeroed_page(GFP_KERNEL);
+	scratch = get_zeroed_page(GFP_KERNEL);
 	if (!scratch)
 		panic("Cannot allocate iommu scratch page");
 	gart_unmapped_entry = GPTE_ENCODE(__pa(scratch));
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 57/83] iwlegacy: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (55 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 56/83] amd_gart_64: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 58/83] iwlwifi: " Al Viro
                   ` (26 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/net/wireless/iwlegacy/3945-mac.c |  2 +-
 drivers/net/wireless/iwlegacy/3945.c     |  2 +-
 drivers/net/wireless/iwlegacy/common.c   | 10 +++++-----
 drivers/net/wireless/iwlegacy/common.h   |  4 ++--
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/net/wireless/iwlegacy/3945-mac.c b/drivers/net/wireless/iwlegacy/3945-mac.c
index af1b3e6..d073676 100644
--- a/drivers/net/wireless/iwlegacy/3945-mac.c
+++ b/drivers/net/wireless/iwlegacy/3945-mac.c
@@ -710,7 +710,7 @@ il3945_get_measurement(struct il_priv *il,
 	if (rc)
 		return rc;
 
-	pkt = (struct il_rx_pkt *)cmd.reply_page;
+	pkt = cmd.reply_page;
 	if (pkt->hdr.flags & IL_CMD_FAILED_MSK) {
 		IL_ERR("Bad return from N_RX_ON_ASSOC command\n");
 		rc = -EIO;
diff --git a/drivers/net/wireless/iwlegacy/3945.c b/drivers/net/wireless/iwlegacy/3945.c
index 93bdf68..1529bd6 100644
--- a/drivers/net/wireless/iwlegacy/3945.c
+++ b/drivers/net/wireless/iwlegacy/3945.c
@@ -1704,7 +1704,7 @@ il3945_send_rxon_assoc(struct il_priv *il)
 	if (rc)
 		return rc;
 
-	pkt = (struct il_rx_pkt *)cmd.reply_page;
+	pkt = cmd.reply_page;
 	if (pkt->hdr.flags & IL_CMD_FAILED_MSK) {
 		IL_ERR("Bad return from C_RXON_ASSOC command\n");
 		rc = -EIO;
diff --git a/drivers/net/wireless/iwlegacy/common.c b/drivers/net/wireless/iwlegacy/common.c
index 8871145..ebdd041 100644
--- a/drivers/net/wireless/iwlegacy/common.c
+++ b/drivers/net/wireless/iwlegacy/common.c
@@ -384,7 +384,7 @@ cancel:
 fail:
 	if (cmd->reply_page) {
 		il_free_pages(il, cmd->reply_page);
-		cmd->reply_page = 0;
+		cmd->reply_page = NULL;
 	}
 out:
 	return ret;
@@ -1288,7 +1288,7 @@ il_send_scan_abort(struct il_priv *il)
 	if (ret)
 		return ret;
 
-	pkt = (struct il_rx_pkt *)cmd.reply_page;
+	pkt = cmd.reply_page;
 	if (pkt->u.status != CAN_ABORT_STATUS) {
 		/* The scan abort will return 1 for success or
 		 * 2 for "failure".  A failure condition can be
@@ -1870,7 +1870,7 @@ il_send_add_sta(struct il_priv *il, struct il_addsta_cmd *sta, u8 flags)
 		return ret;
 
 	if (ret == 0) {
-		pkt = (struct il_rx_pkt *)cmd.reply_page;
+		pkt = cmd.reply_page;
 		ret = il_process_add_sta_resp(il, sta, pkt, true);
 	}
 	il_free_pages(il, cmd.reply_page);
@@ -2124,7 +2124,7 @@ il_send_remove_station(struct il_priv *il, const u8 * addr, int sta_id,
 	if (ret)
 		return ret;
 
-	pkt = (struct il_rx_pkt *)cmd.reply_page;
+	pkt = cmd.reply_page;
 	if (pkt->hdr.flags & IL_CMD_FAILED_MSK) {
 		IL_ERR("Bad return from C_REM_STA (0x%08X)\n", pkt->hdr.flags);
 		ret = -EIO;
@@ -3319,7 +3319,7 @@ il_tx_cmd_complete(struct il_priv *il, struct il_rx_buf *rxb)
 
 	/* Input error checking is done when commands are added to queue. */
 	if (meta->flags & CMD_WANT_SKB) {
-		meta->source->reply_page = (unsigned long)rxb_addr(rxb);
+		meta->source->reply_page = rxb_addr(rxb);
 		rxb->page = NULL;
 	} else if (meta->callback)
 		meta->callback(il, cmd, pkt);
diff --git a/drivers/net/wireless/iwlegacy/common.h b/drivers/net/wireless/iwlegacy/common.h
index 555bf02..6581df1 100644
--- a/drivers/net/wireless/iwlegacy/common.h
+++ b/drivers/net/wireless/iwlegacy/common.h
@@ -576,7 +576,7 @@ struct il_device_cmd {
 
 struct il_host_cmd {
 	const void *data;
-	unsigned long reply_page;
+	struct il_rx_pkt *reply_page;
 	void (*callback) (struct il_priv *il, struct il_device_cmd *cmd,
 			  struct il_rx_pkt *pkt);
 	u32 flags;
@@ -1502,7 +1502,7 @@ __il_free_pages(struct il_priv *il, struct page *page)
 }
 
 static inline void
-il_free_pages(struct il_priv *il, unsigned long page)
+il_free_pages(struct il_priv *il, void *page)
 {
 	free_pages((void *)page, il->hw_params.rx_page_order);
 	il->alloc_rxb_page--;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 58/83] iwlwifi: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (56 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 57/83] iwlegacy: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 59/83] add pointer-returning variants of __get_free_pages/__get_free_page Al Viro
                   ` (25 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/net/wireless/iwlwifi/iwl-trans.h | 4 ++--
 drivers/net/wireless/iwlwifi/pcie/tx.c   | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h
index 8ccbda2..94d3c5b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans.h
+++ b/drivers/net/wireless/iwlwifi/iwl-trans.h
@@ -331,7 +331,7 @@ enum iwl_hcmd_dataflag {
 struct iwl_host_cmd {
 	const void *data[IWL_MAX_CMD_TBS_PER_TFD];
 	struct iwl_rx_packet *resp_pkt;
-	unsigned long _rx_page_addr;
+	void *_rx_page_addr;
 	u32 _rx_page_order;
 
 	u32 flags;
@@ -342,7 +342,7 @@ struct iwl_host_cmd {
 
 static inline void iwl_free_resp(struct iwl_host_cmd *cmd)
 {
-	free_pages((void *)cmd->_rx_page_addr, cmd->_rx_page_order);
+	free_pages(cmd->_rx_page_addr, cmd->_rx_page_order);
 }
 
 struct iwl_rx_cmd_buffer {
diff --git a/drivers/net/wireless/iwlwifi/pcie/tx.c b/drivers/net/wireless/iwlwifi/pcie/tx.c
index a8c8a4a..53f1380 100644
--- a/drivers/net/wireless/iwlwifi/pcie/tx.c
+++ b/drivers/net/wireless/iwlwifi/pcie/tx.c
@@ -1634,7 +1634,7 @@ void iwl_pcie_hcmd_complete(struct iwl_trans *trans,
 		struct page *p = rxb_steal_page(rxb);
 
 		meta->source->resp_pkt = pkt;
-		meta->source->_rx_page_addr = (unsigned long)page_address(p);
+		meta->source->_rx_page_addr = page_address(p);
 		meta->source->_rx_page_order = trans_pcie->rx_page_order;
 	}
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 59/83] add pointer-returning variants of __get_free_pages/__get_free_page
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (57 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 58/83] iwlwifi: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 60/83] switch obvious cases to get_free_pages() Al Viro
                   ` (24 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/block/xen-blkback/blkback.c | 4 ++--
 drivers/xen/xen-scsiback.c          | 6 +++---
 include/linux/gfp.h                 | 9 +++++++--
 mm/page_alloc.c                     | 8 ++++----
 4 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
index f909994..aa1c52a 100644
--- a/drivers/block/xen-blkback/blkback.c
+++ b/drivers/block/xen-blkback/blkback.c
@@ -113,7 +113,7 @@ module_param(log_stats, int, 0644);
 /* Number of free pages to remove on each call to gnttab_free_pages */
 #define NUM_BATCH_FREE_PAGES 10
 
-static inline int get_free_page(struct xen_blkif *blkif, struct page **page)
+static inline int xen_get_free_page(struct xen_blkif *blkif, struct page **page)
 {
 	unsigned long flags;
 
@@ -819,7 +819,7 @@ again:
 			pages[i]->page = persistent_gnt->page;
 			pages[i]->persistent_gnt = persistent_gnt;
 		} else {
-			if (get_free_page(blkif, &pages[i]->page))
+			if (xen_get_free_page(blkif, &pages[i]->page))
 				goto out_of_memory;
 			addr = vaddr(pages[i]->page);
 			pages_to_gnt[segs_to_map] = pages[i]->page;
diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c
index 43bcae8..ebd2321 100644
--- a/drivers/xen/xen-scsiback.c
+++ b/drivers/xen/xen-scsiback.c
@@ -229,7 +229,7 @@ static void put_free_pages(struct page **page, int num)
 	spin_unlock_irqrestore(&free_pages_lock, flags);
 }
 
-static int get_free_page(struct page **page)
+static int xen_get_free_page(struct page **page)
 {
 	unsigned long flags;
 
@@ -439,7 +439,7 @@ static int scsiback_gnttab_data_map_list(struct vscsibk_pend *pending_req,
 	struct vscsibk_info *info = pending_req->info;
 
 	for (i = 0; i < cnt; i++) {
-		if (get_free_page(pg + mapcount)) {
+		if (xen_get_free_page(pg + mapcount)) {
 			put_free_pages(pg, mapcount);
 			pr_err("no grant page\n");
 			return -ENOMEM;
@@ -1902,7 +1902,7 @@ static void __exit scsiback_exit(void)
 	struct page *page;
 
 	while (free_pages_num) {
-		if (get_free_page(&page))
+		if (xen_get_free_page(&page))
 			BUG();
 		gnttab_free_pages(1, &page);
 	}
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index fc4529d..bb1626a 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -473,18 +473,23 @@ extern struct page *alloc_kmem_pages(gfp_t gfp_mask, unsigned int order);
 extern struct page *alloc_kmem_pages_node(int nid, gfp_t gfp_mask,
 					  unsigned int order);
 
-extern unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order);
+extern void *get_free_pages(gfp_t gfp_mask, unsigned int order);
+#define __get_free_pages(gfp_mask, order) \
+	((unsigned long)get_free_pages(gfp_mask, order))
 extern void *get_zeroed_page(gfp_t gfp_mask);
 
 void *alloc_pages_exact(size_t size, gfp_t gfp_mask);
 void free_pages_exact(void *virt, size_t size);
 void * __meminit alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask);
 
+#define get_free_page(gfp_mask) \
+		get_free_pages((gfp_mask), 0)
+
 #define __get_free_page(gfp_mask) \
 		__get_free_pages((gfp_mask), 0)
 
 #define get_dma_pages(gfp_mask, order) \
-		((void *)__get_free_pages((gfp_mask) | GFP_DMA, (order)))
+		get_free_pages((gfp_mask) | GFP_DMA, (order))
 
 extern void __free_pages(struct page *page, unsigned int order);
 extern void free_pages(const void *addr, unsigned int order);
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index a1aa8eb..9ab053f 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3257,7 +3257,7 @@ EXPORT_SYMBOL(__alloc_pages_nodemask);
 /*
  * Common helper functions.
  */
-unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
+void *get_free_pages(gfp_t gfp_mask, unsigned int order)
 {
 	struct page *page;
 
@@ -3269,10 +3269,10 @@ unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
 
 	page = alloc_pages(gfp_mask, order);
 	if (!page)
-		return 0;
-	return (unsigned long) page_address(page);
+		return NULL;
+	return page_address(page);
 }
-EXPORT_SYMBOL(__get_free_pages);
+EXPORT_SYMBOL(get_free_pages);
 
 void *get_zeroed_page(gfp_t gfp_mask)
 {
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 60/83] switch obvious cases to get_free_pages()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (58 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 59/83] add pointer-returning variants of __get_free_pages/__get_free_page Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 61/83] switch obvious cases to get_free_page() Al Viro
                   ` (23 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/alpha/include/asm/agp.h                       |  2 +-
 arch/alpha/kernel/pci-noop.c                       |  2 +-
 arch/alpha/kernel/pci_iommu.c                      |  2 +-
 arch/arc/include/asm/pgalloc.h                     |  6 +++---
 arch/arm/include/asm/tlb.h                         |  4 ++--
 arch/arm/kvm/mmu.c                                 |  4 ++--
 arch/arm/mm/pgd.c                                  |  2 +-
 arch/blackfin/include/asm/mmu_context.h            |  4 ++--
 arch/cris/arch-v32/drivers/pci/dma.c               |  2 +-
 arch/frv/mm/dma-alloc.c                            |  2 +-
 arch/h8300/kernel/dma.c                            |  2 +-
 arch/ia64/hp/common/sba_iommu.c                    | 10 ++++------
 arch/ia64/include/asm/agp.h                        |  2 +-
 arch/ia64/include/asm/tlb.h                        |  4 ++--
 arch/ia64/kernel/mca.c                             |  3 +--
 arch/ia64/sn/pci/pci_dma.c                         |  2 +-
 arch/m68k/kernel/dma.c                             |  2 +-
 arch/microblaze/include/asm/pgalloc.h              |  2 +-
 arch/microblaze/mm/consistent.c                    |  2 +-
 arch/mips/include/asm/pgalloc.h                    |  6 +++---
 arch/mips/jazz/jazzdma.c                           |  3 +--
 arch/mips/mm/dma-default.c                         |  2 +-
 arch/nios2/include/asm/pgalloc.h                   |  2 +-
 arch/nios2/mm/dma-mapping.c                        |  2 +-
 arch/nios2/mm/pgtable.c                            |  2 +-
 arch/parisc/include/asm/agp.h                      |  2 +-
 arch/parisc/include/asm/pgalloc.h                  |  6 ++----
 arch/parisc/kernel/pci-dma.c                       |  5 ++---
 arch/powerpc/include/asm/agp.h                     |  2 +-
 arch/powerpc/kernel/fadump.c                       |  2 +-
 arch/powerpc/kvm/book3s_64_mmu_hv.c                |  2 +-
 arch/powerpc/mm/pgtable_32.c                       |  2 +-
 arch/powerpc/platforms/cell/spufs/inode.c          |  2 +-
 arch/s390/hypfs/hypfs_diag.c                       |  2 +-
 arch/s390/include/asm/idals.h                      |  3 +--
 arch/s390/kernel/smp.c                             |  3 +--
 arch/s390/mm/vmem.c                                |  2 +-
 arch/s390/pci/pci_clp.c                            |  2 +-
 arch/score/include/asm/pgalloc.h                   |  4 ++--
 arch/sh/mm/consistent.c                            |  2 +-
 arch/sparc/include/asm/agp.h                       |  2 +-
 arch/sparc/kernel/ioport.c                         |  4 ++--
 arch/sparc/kernel/irq_64.c                         |  3 +--
 arch/sparc/kernel/ldc.c                            |  5 ++---
 arch/sparc/kernel/pci_fire.c                       |  2 +-
 arch/sparc/kernel/pci_sun4v.c                      |  2 +-
 arch/sparc/kernel/traps_64.c                       |  3 +--
 arch/um/drivers/net_kern.c                         |  2 +-
 arch/um/kernel/process.c                           |  2 +-
 arch/unicore32/mm/pgd.c                            |  2 +-
 arch/x86/include/asm/agp.h                         |  2 +-
 arch/x86/include/asm/xen/page-coherent.h           |  2 +-
 arch/x86/kernel/amd_gart_64.c                      |  4 ++--
 arch/x86/kernel/pci-calgary_64.c                   |  2 +-
 arch/x86/mm/init.c                                 |  2 +-
 arch/x86/platform/efi/efi.c                        |  2 +-
 arch/x86/um/ldt.c                                  |  3 +--
 arch/xtensa/include/asm/pgalloc.h                  |  2 +-
 crypto/xor.c                                       |  2 +-
 drivers/base/devres.c                              |  2 +-
 drivers/block/ps3vram.c                            |  3 +--
 drivers/block/xen-blkfront.c                       |  3 +--
 drivers/block/zram/zcomp.c                         |  2 +-
 drivers/char/agp/hp-agp.c                          |  2 +-
 drivers/char/agp/uninorth-agp.c                    |  2 +-
 drivers/crypto/atmel-aes.c                         |  4 ++--
 drivers/crypto/atmel-tdes.c                        |  4 ++--
 drivers/crypto/nx/nx-842.c                         |  4 ++--
 drivers/crypto/omap-aes.c                          |  4 ++--
 drivers/crypto/omap-des.c                          |  4 ++--
 drivers/dma/ste_dma40.c                            |  2 +-
 drivers/firmware/dell_rbu.c                        |  6 ++----
 drivers/gpu/drm/amd/amdkfd/kfd_events.c            |  2 +-
 drivers/hv/channel.c                               |  6 +++---
 drivers/hv/connection.c                            |  7 +++----
 drivers/iommu/amd_iommu_init.c                     | 16 ++++++++--------
 drivers/iommu/exynos-iommu.c                       |  4 ++--
 drivers/iommu/msm_iommu.c                          |  8 +++-----
 drivers/irqchip/irq-gic-v3-its.c                   |  2 +-
 drivers/md/bcache/bset.c                           |  8 ++++----
 drivers/md/bcache/btree.c                          |  3 +--
 drivers/md/bcache/journal.c                        |  4 ++--
 drivers/md/bcache/super.c                          |  2 +-
 drivers/md/dm-bufio.c                              |  3 +--
 drivers/media/pci/solo6x10/solo6x10-p2m.c          |  4 ++--
 drivers/media/platform/davinci/dm644x_ccdc.c       |  3 +--
 drivers/misc/cxl/native.c                          |  4 ++--
 drivers/misc/mic/card/mic_virtio.c                 |  2 +-
 drivers/misc/mic/host/mic_virtio.c                 |  5 ++---
 drivers/misc/mic/scif/scif_rma.h                   |  2 +-
 drivers/net/ethernet/cavium/liquidio/octeon_main.h |  4 +---
 drivers/net/ethernet/sgi/ioc3-eth.c                |  2 +-
 drivers/net/irda/au1k_ir.c                         |  2 +-
 drivers/net/rionet.c                               |  2 +-
 drivers/net/wireless/b43/debugfs.c                 |  2 +-
 drivers/net/wireless/b43legacy/debugfs.c           |  2 +-
 drivers/net/wireless/ti/wlcore/main.c              |  2 +-
 drivers/parisc/ccio-dma.c                          |  8 +++-----
 drivers/parisc/ccio-rm-dma.c                       |  2 +-
 drivers/parisc/sba_iommu.c                         |  7 +++----
 drivers/pci/host/pci-tegra.c                       |  2 +-
 drivers/pci/host/pcie-designware.c                 |  2 +-
 drivers/pci/host/pcie-rcar.c                       |  2 +-
 drivers/pci/host/pcie-xilinx.c                     |  2 +-
 drivers/s390/block/dasd.c                          |  2 +-
 drivers/s390/char/hmcdrv_cache.c                   |  2 +-
 drivers/s390/char/hmcdrv_ftp.c                     |  2 +-
 drivers/s390/char/tty3270.c                        |  4 ++--
 drivers/s390/char/vmcp.c                           |  2 +-
 drivers/s390/cio/cmf.c                             |  2 +-
 drivers/scsi/cxlflash/main.c                       |  2 +-
 drivers/scsi/libiscsi.c                            |  3 +--
 drivers/scsi/lpfc/lpfc_init.c                      |  6 ++----
 drivers/scsi/megaraid/megaraid_sas_base.c          |  2 +-
 drivers/scsi/megaraid/megaraid_sas_fusion.c        |  4 ++--
 drivers/scsi/mpt3sas/mpt3sas_base.c                |  5 ++---
 drivers/scsi/sym53c8xx_2/sym_hipd.h                |  2 +-
 drivers/scsi/vmw_pvscsi.c                          |  3 +--
 drivers/sh/maple/maple.c                           |  3 +--
 drivers/usb/core/devices.c                         |  2 +-
 drivers/video/fbdev/fb-puv3.c                      |  2 +-
 drivers/video/fbdev/ssd1307fb.c                    |  2 +-
 fs/ceph/mds_client.c                               |  3 +--
 fs/configfs/file.c                                 |  2 +-
 fs/hfs/mdb.c                                       |  2 +-
 fs/jbd2/journal.c                                  |  4 ++--
 fs/nilfs2/ioctl.c                                  |  2 +-
 fs/proc/vmcore.c                                   |  4 ++--
 fs/quota/dquot.c                                   |  2 +-
 kernel/trace/ftrace.c                              |  2 +-
 kernel/trace/trace_events.c                        |  6 ++----
 lib/percpu_ida.c                                   |  2 +-
 lib/raid6/algos.c                                  |  2 +-
 lib/swiotlb.c                                      | 12 +++++-------
 mm/memory.c                                        |  2 +-
 mm/page_alloc.c                                    |  4 ++--
 mm/slub.c                                          |  2 +-
 net/core/neighbour.c                               |  3 +--
 net/dccp/proto.c                                   |  8 ++++----
 net/decnet/dn_route.c                              |  3 +--
 net/ipv4/fib_semantics.c                           |  3 +--
 net/netfilter/nf_conntrack_core.c                  |  2 +-
 net/netlink/af_netlink.c                           |  4 ++--
 net/packet/af_packet.c                             |  4 ++--
 net/sched/sch_api.c                                |  3 +--
 net/sctp/protocol.c                                |  8 ++++----
 net/sctp/ssnmap.c                                  |  3 +--
 net/xfrm/xfrm_hash.c                               |  3 +--
 security/integrity/ima/ima_crypto.c                |  4 ++--
 sound/core/memalloc.c                              |  2 +-
 sound/oss/dmabuf.c                                 |  2 +-
 sound/usb/usx2y/usb_stream.c                       |  5 ++---
 152 files changed, 222 insertions(+), 269 deletions(-)

diff --git a/arch/alpha/include/asm/agp.h b/arch/alpha/include/asm/agp.h
index 2fe5800..6179691 100644
--- a/arch/alpha/include/asm/agp.h
+++ b/arch/alpha/include/asm/agp.h
@@ -11,7 +11,7 @@
 
 /* GATT allocation. Returns/accepts GATT kernel virtual address. */
 #define alloc_gatt_pages(order)		\
-	((char *)__get_free_pages(GFP_KERNEL, (order)))
+	((char *)get_free_pages(GFP_KERNEL, (order)))
 #define free_gatt_pages(table, order)	\
 	free_pages((table), (order))
 
diff --git a/arch/alpha/kernel/pci-noop.c b/arch/alpha/kernel/pci-noop.c
index d3bcb88..543e3e7 100644
--- a/arch/alpha/kernel/pci-noop.c
+++ b/arch/alpha/kernel/pci-noop.c
@@ -115,7 +115,7 @@ static void *alpha_noop_alloc_coherent(struct device *dev, size_t size,
 
 	if (!dev || *dev->dma_mask >= 0xffffffffUL)
 		gfp &= ~GFP_DMA;
-	ret = (void *)__get_free_pages(gfp, get_order(size));
+	ret = get_free_pages(gfp, get_order(size));
 	if (ret) {
 		memset(ret, 0, size);
 		*dma_handle = virt_to_phys(ret);
diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c
index fb0b20ee..b9b910f 100644
--- a/arch/alpha/kernel/pci_iommu.c
+++ b/arch/alpha/kernel/pci_iommu.c
@@ -442,7 +442,7 @@ static void *alpha_pci_alloc_coherent(struct device *dev, size_t size,
 	gfp &= ~GFP_DMA;
 
 try_again:
-	cpu_addr = (void *)__get_free_pages(gfp, order);
+	cpu_addr = get_free_pages(gfp, order);
 	if (! cpu_addr) {
 		printk(KERN_INFO "pci_alloc_consistent: "
 		       "get_free_pages failed from %pf\n",
diff --git a/arch/arc/include/asm/pgalloc.h b/arch/arc/include/asm/pgalloc.h
index 1200117..a540e9b 100644
--- a/arch/arc/include/asm/pgalloc.h
+++ b/arch/arc/include/asm/pgalloc.h
@@ -55,7 +55,7 @@ static inline int __get_order_pgd(void)
 static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 {
 	int num, num2;
-	pgd_t *ret = (pgd_t *) __get_free_pages(GFP_KERNEL, __get_order_pgd());
+	pgd_t *ret = get_free_pages(GFP_KERNEL, __get_order_pgd());
 
 	if (ret) {
 		num = USER_PTRS_PER_PGD + USER_KERNEL_GUTTER / PGDIR_SIZE;
@@ -95,7 +95,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 {
 	pte_t *pte;
 
-	pte = (pte_t *) __get_free_pages(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO,
+	pte = get_free_pages(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO,
 					 __get_order_pte());
 
 	return pte;
@@ -107,7 +107,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long address)
 	pgtable_t pte_pg;
 	struct page *page;
 
-	pte_pg = (pgtable_t)__get_free_pages(GFP_KERNEL | __GFP_REPEAT, __get_order_pte());
+	pte_pg = get_free_pages(GFP_KERNEL | __GFP_REPEAT, __get_order_pte());
 	if (!pte_pg)
 		return 0;
 	memzero((void *)pte_pg, PTRS_PER_PTE * sizeof(pte_t));
diff --git a/arch/arm/include/asm/tlb.h b/arch/arm/include/asm/tlb.h
index c8611f2..21300f4 100644
--- a/arch/arm/include/asm/tlb.h
+++ b/arch/arm/include/asm/tlb.h
@@ -117,10 +117,10 @@ static inline void tlb_add_flush(struct mmu_gather *tlb, unsigned long addr)
 
 static inline void __tlb_alloc_page(struct mmu_gather *tlb)
 {
-	unsigned long addr = __get_free_pages(GFP_NOWAIT | __GFP_NOWARN, 0);
+	void *addr = get_free_pages(GFP_NOWAIT | __GFP_NOWARN, 0);
 
 	if (addr) {
-		tlb->pages = (void *)addr;
+		tlb->pages = addr;
 		tlb->max = PAGE_SIZE / sizeof(struct page *);
 	}
 }
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
index 190e9fb..429b673 100644
--- a/arch/arm/kvm/mmu.c
+++ b/arch/arm/kvm/mmu.c
@@ -1657,8 +1657,8 @@ int kvm_mmu_init(void)
 	 */
 	BUG_ON((hyp_idmap_start ^ (hyp_idmap_end - 1)) & PAGE_MASK);
 
-	hyp_pgd = (pgd_t *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, hyp_pgd_order);
-	boot_hyp_pgd = (pgd_t *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, hyp_pgd_order);
+	hyp_pgd = get_free_pages(GFP_KERNEL | __GFP_ZERO, hyp_pgd_order);
+	boot_hyp_pgd = get_free_pages(GFP_KERNEL | __GFP_ZERO, hyp_pgd_order);
 
 	if (!hyp_pgd || !boot_hyp_pgd) {
 		kvm_err("Hyp mode PGD not allocated\n");
diff --git a/arch/arm/mm/pgd.c b/arch/arm/mm/pgd.c
index b8799fa..f65e684 100644
--- a/arch/arm/mm/pgd.c
+++ b/arch/arm/mm/pgd.c
@@ -23,7 +23,7 @@
 #define __pgd_alloc()	kmalloc(PTRS_PER_PGD * sizeof(pgd_t), GFP_KERNEL)
 #define __pgd_free(pgd)	kfree(pgd)
 #else
-#define __pgd_alloc()	(pgd_t *)__get_free_pages(GFP_KERNEL | __GFP_REPEAT, 2)
+#define __pgd_alloc()	get_free_pages(GFP_KERNEL | __GFP_REPEAT, 2)
 #define __pgd_free(pgd)	free_pages(pgd, 2)
 #endif
 
diff --git a/arch/blackfin/include/asm/mmu_context.h b/arch/blackfin/include/asm/mmu_context.h
index 198cb70..75147aa 100644
--- a/arch/blackfin/include/asm/mmu_context.h
+++ b/arch/blackfin/include/asm/mmu_context.h
@@ -173,8 +173,8 @@ static inline int
 init_new_context(struct task_struct *tsk, struct mm_struct *mm)
 {
 #ifdef CONFIG_MPU
-	unsigned long p = __get_free_pages(GFP_KERNEL, page_mask_order);
-	mm->context.page_rwx_mask = (unsigned long *)p;
+	unsigned long *p = get_free_pages(GFP_KERNEL, page_mask_order);
+	mm->context.page_rwx_mask = p;
 	memset(mm->context.page_rwx_mask, 0,
 	       page_mask_nelts * 3 * sizeof(long));
 #endif
diff --git a/arch/cris/arch-v32/drivers/pci/dma.c b/arch/cris/arch-v32/drivers/pci/dma.c
index 9b43cec..979a2c7 100644
--- a/arch/cris/arch-v32/drivers/pci/dma.c
+++ b/arch/cris/arch-v32/drivers/pci/dma.c
@@ -30,7 +30,7 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
 	if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff))
 		gfp |= GFP_DMA;
 
-	ret = (void *)__get_free_pages(gfp, order);
+	ret = get_free_pages(gfp, order);
 
 	if (ret != NULL) {
 		memset(ret, 0, size);
diff --git a/arch/frv/mm/dma-alloc.c b/arch/frv/mm/dma-alloc.c
index 62268e1..60dea14 100644
--- a/arch/frv/mm/dma-alloc.c
+++ b/arch/frv/mm/dma-alloc.c
@@ -93,7 +93,7 @@ void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle)
 	size = PAGE_ALIGN(size);
 	order = get_order(size);
 
-	page = (void *)__get_free_pages(gfp, order);
+	page = get_free_pages(gfp, order);
 	if (!page) {
 		BUG();
 		return NULL;
diff --git a/arch/h8300/kernel/dma.c b/arch/h8300/kernel/dma.c
index 063a0f5..3092f45 100644
--- a/arch/h8300/kernel/dma.c
+++ b/arch/h8300/kernel/dma.c
@@ -21,7 +21,7 @@ static void *dma_alloc(struct device *dev, size_t size,
 
 	if (dev == NULL || (*dev->dma_mask < 0xffffffff))
 		gfp |= GFP_DMA;
-	ret = (void *)__get_free_pages(gfp, get_order(size));
+	ret = get_free_pages(gfp, get_order(size));
 
 	if (ret != NULL) {
 		memset(ret, 0, size);
diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c
index 2988500..c721949 100644
--- a/arch/ia64/hp/common/sba_iommu.c
+++ b/arch/ia64/hp/common/sba_iommu.c
@@ -1149,7 +1149,7 @@ sba_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
 		addr = page_address(page);
 	}
 #else
-	addr = (void *) __get_free_pages(flags, get_order(size));
+	addr = get_free_pages(flags, get_order(size));
 #endif
 	if (unlikely(!addr))
 		return NULL;
@@ -1631,8 +1631,7 @@ ioc_iova_init(struct ioc *ioc)
 	WRITE_REG(tcnfg, ioc->ioc_hpa + IOC_TCNFG);
 
 	ioc->pdir_size = (ioc->iov_size / iovp_size) * PDIR_ENTRY_SIZE;
-	ioc->pdir_base = (void *) __get_free_pages(GFP_KERNEL,
-						   get_order(ioc->pdir_size));
+	ioc->pdir_base = get_free_pages(GFP_KERNEL, get_order(ioc->pdir_size));
 	if (!ioc->pdir_base)
 		panic(PFX "Couldn't allocate I/O Page Table\n");
 
@@ -1671,7 +1670,7 @@ ioc_iova_init(struct ioc *ioc)
 		int poison_size = 16;
 		void *poison_addr, *addr;
 
-		addr = (void *)__get_free_pages(GFP_KERNEL, get_order(iovp_size));
+		addr = get_free_pages(GFP_KERNEL, get_order(iovp_size));
 		if (!addr)
 			panic(PFX "Couldn't allocate PDIR spill page\n");
 
@@ -1712,8 +1711,7 @@ ioc_resource_init(struct ioc *ioc)
 	ioc->res_size >>= 3;  /* convert bit count to byte count */
 	DBG_INIT("%s() res_size 0x%x\n", __func__, ioc->res_size);
 
-	ioc->res_map = (char *) __get_free_pages(GFP_KERNEL,
-						 get_order(ioc->res_size));
+	ioc->res_map = get_free_pages(GFP_KERNEL, get_order(ioc->res_size));
 	if (!ioc->res_map)
 		panic(PFX "Couldn't allocate resource map\n");
 
diff --git a/arch/ia64/include/asm/agp.h b/arch/ia64/include/asm/agp.h
index 80c30d4..4f360b9 100644
--- a/arch/ia64/include/asm/agp.h
+++ b/arch/ia64/include/asm/agp.h
@@ -19,7 +19,7 @@
 
 /* GATT allocation. Returns/accepts GATT kernel virtual address. */
 #define alloc_gatt_pages(order)		\
-	((char *)__get_free_pages(GFP_KERNEL, (order)))
+	((char *)get_free_pages(GFP_KERNEL, (order)))
 #define free_gatt_pages(table, order)	\
 	free_pages((table), (order))
 
diff --git a/arch/ia64/include/asm/tlb.h b/arch/ia64/include/asm/tlb.h
index 52ab3a9..06dc9e3 100644
--- a/arch/ia64/include/asm/tlb.h
+++ b/arch/ia64/include/asm/tlb.h
@@ -158,10 +158,10 @@ ia64_tlb_flush_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long e
 
 static inline void __tlb_alloc_page(struct mmu_gather *tlb)
 {
-	unsigned long addr = __get_free_pages(GFP_NOWAIT | __GFP_NOWARN, 0);
+	void *addr = get_free_pages(GFP_NOWAIT | __GFP_NOWARN, 0);
 
 	if (addr) {
-		tlb->pages = (void *)addr;
+		tlb->pages = addr;
 		tlb->max = PAGE_SIZE / sizeof(void *);
 	}
 }
diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c
index 2889412..2648a6f 100644
--- a/arch/ia64/kernel/mca.c
+++ b/arch/ia64/kernel/mca.c
@@ -1858,8 +1858,7 @@ ia64_mca_cpu_init(void *cpu_data)
 			data = mca_bootmem();
 			first_time = 0;
 		} else
-			data = (void *)__get_free_pages(GFP_KERNEL,
-							get_order(sz));
+			data = get_free_pages(GFP_KERNEL, get_order(sz));
 		if (!data)
 			panic("Could not allocate MCA memory for cpu %d\n",
 					cpu);
diff --git a/arch/ia64/sn/pci/pci_dma.c b/arch/ia64/sn/pci/pci_dma.c
index f25c898..2126b54 100644
--- a/arch/ia64/sn/pci/pci_dma.c
+++ b/arch/ia64/sn/pci/pci_dma.c
@@ -100,7 +100,7 @@ static void *sn_dma_alloc_coherent(struct device *dev, size_t size,
 		else
 			return NULL;
 	} else
-		cpuaddr = (void *)__get_free_pages(flags, get_order(size));
+		cpuaddr = get_free_pages(flags, get_order(size));
 
 	if (unlikely(!cpuaddr))
 		return NULL;
diff --git a/arch/m68k/kernel/dma.c b/arch/m68k/kernel/dma.c
index 2bdf7bf..da443983 100644
--- a/arch/m68k/kernel/dma.c
+++ b/arch/m68k/kernel/dma.c
@@ -81,7 +81,7 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
 
 	if (dev == NULL || (*dev->dma_mask < 0xffffffff))
 		gfp |= GFP_DMA;
-	ret = (void *)__get_free_pages(gfp, get_order(size));
+	ret = get_free_pages(gfp, get_order(size));
 
 	if (ret != NULL) {
 		memset(ret, 0, size);
diff --git a/arch/microblaze/include/asm/pgalloc.h b/arch/microblaze/include/asm/pgalloc.h
index 5e3fc6c..13030db 100644
--- a/arch/microblaze/include/asm/pgalloc.h
+++ b/arch/microblaze/include/asm/pgalloc.h
@@ -64,7 +64,7 @@ static inline pgd_t *get_pgd_slow(void)
 {
 	pgd_t *ret;
 
-	ret = (pgd_t *)__get_free_pages(GFP_KERNEL, PGDIR_ORDER);
+	ret = get_free_pages(GFP_KERNEL, PGDIR_ORDER);
 	if (ret != NULL)
 		clear_page(ret);
 	return ret;
diff --git a/arch/microblaze/mm/consistent.c b/arch/microblaze/mm/consistent.c
index bdeb2cb..335f006 100644
--- a/arch/microblaze/mm/consistent.c
+++ b/arch/microblaze/mm/consistent.c
@@ -79,7 +79,7 @@ void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle)
 	size = PAGE_ALIGN(size);
 	order = get_order(size);
 
-	vaddr = (void *)__get_free_pages(gfp, order);
+	vaddr = get_free_pages(gfp, order);
 	if (!vaddr)
 		return NULL;
 
diff --git a/arch/mips/include/asm/pgalloc.h b/arch/mips/include/asm/pgalloc.h
index e29cc40..820ca21 100644
--- a/arch/mips/include/asm/pgalloc.h
+++ b/arch/mips/include/asm/pgalloc.h
@@ -48,7 +48,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 {
 	pgd_t *ret, *init;
 
-	ret = (pgd_t *) __get_free_pages(GFP_KERNEL, PGD_ORDER);
+	ret = get_free_pages(GFP_KERNEL, PGD_ORDER);
 	if (ret) {
 		init = pgd_offset(&init_mm, 0UL);
 		pgd_init((unsigned long)ret);
@@ -69,7 +69,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 {
 	pte_t *pte;
 
-	pte = (pte_t *) __get_free_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, PTE_ORDER);
+	pte = get_free_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, PTE_ORDER);
 
 	return pte;
 }
@@ -113,7 +113,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
 {
 	pmd_t *pmd;
 
-	pmd = (pmd_t *) __get_free_pages(GFP_KERNEL|__GFP_REPEAT, PMD_ORDER);
+	pmd = get_free_pages(GFP_KERNEL|__GFP_REPEAT, PMD_ORDER);
 	if (pmd)
 		pmd_init((unsigned long)pmd, (unsigned long)invalid_pte_table);
 	return pmd;
diff --git a/arch/mips/jazz/jazzdma.c b/arch/mips/jazz/jazzdma.c
index db6f5af..8f65436 100644
--- a/arch/mips/jazz/jazzdma.c
+++ b/arch/mips/jazz/jazzdma.c
@@ -67,8 +67,7 @@ static int __init vdma_init(void)
 	 * aligned and should be uncached to avoid cache flushing after every
 	 * update.
 	 */
-	pgtbl = (VDMA_PGTBL_ENTRY *)__get_free_pages(GFP_KERNEL | GFP_DMA,
-						    get_order(VDMA_PGTBL_SIZE));
+	pgtbl = get_free_pages(GFP_KERNEL | GFP_DMA, get_order(VDMA_PGTBL_SIZE));
 	BUG_ON(!pgtbl);
 	dma_cache_wback_inv((unsigned long)pgtbl, VDMA_PGTBL_SIZE);
 	pgtbl = (VDMA_PGTBL_ENTRY *)KSEG1ADDR(pgtbl);
diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c
index d3c1cec..c0863e9 100644
--- a/arch/mips/mm/dma-default.c
+++ b/arch/mips/mm/dma-default.c
@@ -119,7 +119,7 @@ static void *mips_dma_alloc_noncoherent(struct device *dev, size_t size,
 
 	gfp = massage_gfp_flags(dev, gfp);
 
-	ret = (void *) __get_free_pages(gfp, get_order(size));
+	ret = get_free_pages(gfp, get_order(size));
 
 	if (ret != NULL) {
 		memset(ret, 0, size);
diff --git a/arch/nios2/include/asm/pgalloc.h b/arch/nios2/include/asm/pgalloc.h
index 91cd323..12cfc5e 100644
--- a/arch/nios2/include/asm/pgalloc.h
+++ b/arch/nios2/include/asm/pgalloc.h
@@ -42,7 +42,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 {
 	pte_t *pte;
 
-	pte = (pte_t *) __get_free_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO,
+	pte = get_free_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO,
 					PTE_ORDER);
 
 	return pte;
diff --git a/arch/nios2/mm/dma-mapping.c b/arch/nios2/mm/dma-mapping.c
index 0195f8f..7efef15 100644
--- a/arch/nios2/mm/dma-mapping.c
+++ b/arch/nios2/mm/dma-mapping.c
@@ -35,7 +35,7 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
 	if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff))
 		gfp |= GFP_DMA;
 
-	ret = (void *) __get_free_pages(gfp, get_order(size));
+	ret = get_free_pages(gfp, get_order(size));
 	if (ret != NULL) {
 		*dma_handle = virt_to_phys(ret);
 		flush_dcache_range((unsigned long) ret,
diff --git a/arch/nios2/mm/pgtable.c b/arch/nios2/mm/pgtable.c
index 61e24a2..9af52c7 100644
--- a/arch/nios2/mm/pgtable.c
+++ b/arch/nios2/mm/pgtable.c
@@ -55,7 +55,7 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
 {
 	pgd_t *ret, *init;
 
-	ret = (pgd_t *) __get_free_pages(GFP_KERNEL, PGD_ORDER);
+	ret = get_free_pages(GFP_KERNEL, PGD_ORDER);
 	if (ret) {
 		init = pgd_offset(&init_mm, 0UL);
 		pgd_init(ret);
diff --git a/arch/parisc/include/asm/agp.h b/arch/parisc/include/asm/agp.h
index 31f67a5..4ecd394 100644
--- a/arch/parisc/include/asm/agp.h
+++ b/arch/parisc/include/asm/agp.h
@@ -13,7 +13,7 @@
 
 /* GATT allocation. Returns/accepts GATT kernel virtual address. */
 #define alloc_gatt_pages(order)		\
-	((char *)__get_free_pages(GFP_KERNEL, (order)))
+	((char *)get_free_pages(GFP_KERNEL, (order)))
 #define free_gatt_pages(table, order)	\
 	free_pages((table), (order))
 
diff --git a/arch/parisc/include/asm/pgalloc.h b/arch/parisc/include/asm/pgalloc.h
index 51cb827..5c10934 100644
--- a/arch/parisc/include/asm/pgalloc.h
+++ b/arch/parisc/include/asm/pgalloc.h
@@ -20,8 +20,7 @@
  * kernel for machines with under 4GB of memory) */
 static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 {
-	pgd_t *pgd = (pgd_t *)__get_free_pages(GFP_KERNEL,
-					       PGD_ALLOC_ORDER);
+	pgd_t *pgd = get_free_pages(GFP_KERNEL, PGD_ALLOC_ORDER);
 	pgd_t *actual_pgd = pgd;
 
 	if (likely(pgd != NULL)) {
@@ -63,8 +62,7 @@ static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
 
 static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
 {
-	pmd_t *pmd = (pmd_t *)__get_free_pages(GFP_KERNEL|__GFP_REPEAT,
-					       PMD_ORDER);
+	pmd_t *pmd = get_free_pages(GFP_KERNEL|__GFP_REPEAT, PMD_ORDER);
 	if (pmd)
 		memset(pmd, 0, PAGE_SIZE<<PMD_ORDER);
 	return pmd;
diff --git a/arch/parisc/kernel/pci-dma.c b/arch/parisc/kernel/pci-dma.c
index 3c4ebba..6f15633 100644
--- a/arch/parisc/kernel/pci-dma.c
+++ b/arch/parisc/kernel/pci-dma.c
@@ -393,8 +393,7 @@ pcxl_dma_init(void)
 	spin_lock_init(&pcxl_res_lock);
 	pcxl_res_size = PCXL_DMA_MAP_SIZE >> (PAGE_SHIFT + 3);
 	pcxl_res_hint = 0;
-	pcxl_res_map = (char *)__get_free_pages(GFP_KERNEL,
-					    get_order(pcxl_res_size));
+	pcxl_res_map = get_free_pages(GFP_KERNEL, get_order(pcxl_res_size));
 	memset(pcxl_res_map, 0, pcxl_res_size);
 	proc_gsc_root = proc_mkdir("gsc", NULL);
 	if (!proc_gsc_root)
@@ -571,7 +570,7 @@ static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size,
 {
 	void *addr;
 
-	addr = (void *)__get_free_pages(flag, get_order(size));
+	addr = get_free_pages(flag, get_order(size));
 	if (addr)
 		*dma_handle = (dma_addr_t)virt_to_phys(addr);
 
diff --git a/arch/powerpc/include/asm/agp.h b/arch/powerpc/include/asm/agp.h
index 06df165..3c16089 100644
--- a/arch/powerpc/include/asm/agp.h
+++ b/arch/powerpc/include/asm/agp.h
@@ -10,7 +10,7 @@
 
 /* GATT allocation. Returns/accepts GATT kernel virtual address. */
 #define alloc_gatt_pages(order)		\
-	((char *)__get_free_pages(GFP_KERNEL, (order)))
+	((char *)get_free_pages(GFP_KERNEL, (order)))
 #define free_gatt_pages(table, order)	\
 	free_pages((table), (order))
 
diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c
index 26d091a..63fdb91 100644
--- a/arch/powerpc/kernel/fadump.c
+++ b/arch/powerpc/kernel/fadump.c
@@ -551,7 +551,7 @@ static void *fadump_cpu_notes_buf_alloc(unsigned long size)
 	unsigned long order, count, i;
 
 	order = get_order(size);
-	vaddr = (void *)__get_free_pages(GFP_KERNEL|__GFP_ZERO, order);
+	vaddr = get_free_pages(GFP_KERNEL|__GFP_ZERO, order);
 	if (!vaddr)
 		return NULL;
 
diff --git a/arch/powerpc/kvm/book3s_64_mmu_hv.c b/arch/powerpc/kvm/book3s_64_mmu_hv.c
index 3dd6f8e..3e5c71c 100644
--- a/arch/powerpc/kvm/book3s_64_mmu_hv.c
+++ b/arch/powerpc/kvm/book3s_64_mmu_hv.c
@@ -72,7 +72,7 @@ long kvmppc_alloc_hpt(struct kvm *kvm, u32 *htab_orderp)
 	/* Lastly try successively smaller sizes from the page allocator */
 	/* Only do this if userspace didn't specify a size via ioctl */
 	while (!hpt && order > PPC_MIN_HPT_ORDER && !htab_orderp) {
-		hpt = (void *)__get_free_pages(GFP_KERNEL|__GFP_ZERO|
+		hpt = get_free_pages(GFP_KERNEL|__GFP_ZERO|
 					__GFP_REPEAT| __GFP_NOWARN,
 					order - PAGE_SHIFT);
 		if (!hpt)
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
index 89bfc17..6e6c311 100644
--- a/arch/powerpc/mm/pgtable_32.c
+++ b/arch/powerpc/mm/pgtable_32.c
@@ -89,7 +89,7 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
 #ifndef CONFIG_PPC_4K_PAGES
 	ret = kmem_cache_alloc(pgtable_cache, GFP_KERNEL | __GFP_ZERO);
 #else
-	ret = (pgd_t *)__get_free_pages(GFP_KERNEL|__GFP_ZERO,
+	ret = get_free_pages(GFP_KERNEL|__GFP_ZERO,
 			PGDIR_ORDER - PAGE_SHIFT);
 #endif
 	return ret;
diff --git a/arch/powerpc/platforms/cell/spufs/inode.c b/arch/powerpc/platforms/cell/spufs/inode.c
index 14a47f9..9ef5a940 100644
--- a/arch/powerpc/platforms/cell/spufs/inode.c
+++ b/arch/powerpc/platforms/cell/spufs/inode.c
@@ -668,7 +668,7 @@ spufs_init_isolated_loader(void)
 		return;
 
 	/* the loader must be align on a 16 byte boundary */
-	isolated_loader = (char *)__get_free_pages(GFP_KERNEL, get_order(size));
+	isolated_loader = get_free_pages(GFP_KERNEL, get_order(size));
 	if (!isolated_loader)
 		return;
 
diff --git a/arch/s390/hypfs/hypfs_diag.c b/arch/s390/hypfs/hypfs_diag.c
index 08f71f8..dda5bf0 100644
--- a/arch/s390/hypfs/hypfs_diag.c
+++ b/arch/s390/hypfs/hypfs_diag.c
@@ -396,7 +396,7 @@ static void *diag204_alloc_vbuf(int pages)
 
 static void *diag204_alloc_rbuf(void)
 {
-	diag204_buf = (void*)__get_free_pages(GFP_KERNEL,0);
+	diag204_buf = get_free_pages(GFP_KERNEL,0);
 	if (!diag204_buf)
 		return ERR_PTR(-ENOMEM);
 	diag204_buf_pages = 1;
diff --git a/arch/s390/include/asm/idals.h b/arch/s390/include/asm/idals.h
index 56b1baf..cdbf89a 100644
--- a/arch/s390/include/asm/idals.h
+++ b/arch/s390/include/asm/idals.h
@@ -132,8 +132,7 @@ idal_buffer_alloc(size_t size, int page_order)
 			ib->data[i] = ib->data[i-1] + IDA_BLOCK_SIZE;
 			continue;
 		}
-		ib->data[i] = (void *)
-			__get_free_pages(GFP_KERNEL, page_order);
+		ib->data[i] = get_free_pages(GFP_KERNEL, page_order);
 		if (ib->data[i] != NULL)
 			continue;
 		// Not enough memory
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 63c1c8c..34a5041 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -183,8 +183,7 @@ static int pcpu_alloc_lowcore(struct pcpu *pcpu, int cpu)
 	struct _lowcore *lc;
 
 	if (pcpu != &pcpu_devices[0]) {
-		pcpu->lowcore =	(struct _lowcore *)
-			__get_free_pages(GFP_KERNEL | GFP_DMA, LC_ORDER);
+		pcpu->lowcore =	get_free_pages(GFP_KERNEL | GFP_DMA, LC_ORDER);
 		async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER);
 		panic_stack = __get_free_page(GFP_KERNEL);
 		if (!pcpu->lowcore || !panic_stack || !async_stack)
diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c
index ef7d6c8..44cb4af 100644
--- a/arch/s390/mm/vmem.c
+++ b/arch/s390/mm/vmem.c
@@ -30,7 +30,7 @@ static LIST_HEAD(mem_segs);
 static void __ref *vmem_alloc_pages(unsigned int order)
 {
 	if (slab_is_available())
-		return (void *)__get_free_pages(GFP_KERNEL, order);
+		return get_free_pages(GFP_KERNEL, order);
 	return alloc_bootmem_pages((1 << order) * PAGE_SIZE);
 }
 
diff --git a/arch/s390/pci/pci_clp.c b/arch/s390/pci/pci_clp.c
index 5914a16..162d9b6 100644
--- a/arch/s390/pci/pci_clp.c
+++ b/arch/s390/pci/pci_clp.c
@@ -48,7 +48,7 @@ static inline u8 clp_instr(void *data)
 
 static void *clp_alloc_block(gfp_t gfp_mask)
 {
-	return (void *) __get_free_pages(gfp_mask, get_order(CLP_BLK_SIZE));
+	return get_free_pages(gfp_mask, get_order(CLP_BLK_SIZE));
 }
 
 static void clp_free_block(void *ptr)
diff --git a/arch/score/include/asm/pgalloc.h b/arch/score/include/asm/pgalloc.h
index 55fb080..6e07805 100644
--- a/arch/score/include/asm/pgalloc.h
+++ b/arch/score/include/asm/pgalloc.h
@@ -21,7 +21,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 {
 	pgd_t *ret, *init;
 
-	ret = (pgd_t *) __get_free_pages(GFP_KERNEL, PGD_ORDER);
+	ret = get_free_pages(GFP_KERNEL, PGD_ORDER);
 	if (ret) {
 		init = pgd_offset(&init_mm, 0UL);
 		pgd_init((unsigned long)ret);
@@ -42,7 +42,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 {
 	pte_t *pte;
 
-	pte = (pte_t *) __get_free_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO,
+	pte = get_free_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO,
 					PTE_ORDER);
 
 	return pte;
diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c
index 4721e24..6324c40 100644
--- a/arch/sh/mm/consistent.c
+++ b/arch/sh/mm/consistent.c
@@ -41,7 +41,7 @@ void *dma_generic_alloc_coherent(struct device *dev, size_t size,
 
 	gfp |= __GFP_ZERO;
 
-	ret = (void *)__get_free_pages(gfp, order);
+	ret = get_free_pages(gfp, order);
 	if (!ret)
 		return NULL;
 
diff --git a/arch/sparc/include/asm/agp.h b/arch/sparc/include/asm/agp.h
index 363d3e6..dd31037 100644
--- a/arch/sparc/include/asm/agp.h
+++ b/arch/sparc/include/asm/agp.h
@@ -9,7 +9,7 @@
 
 /* GATT allocation. Returns/accepts GATT kernel virtual address. */
 #define alloc_gatt_pages(order)		\
-	((char *)__get_free_pages(GFP_KERNEL, (order)))
+	((char *)get_free_pages(GFP_KERNEL, (order)))
 #define free_gatt_pages(table, order)	\
 	free_pages((table), (order))
 
diff --git a/arch/sparc/kernel/ioport.c b/arch/sparc/kernel/ioport.c
index 3bd3481..1ff0516 100644
--- a/arch/sparc/kernel/ioport.c
+++ b/arch/sparc/kernel/ioport.c
@@ -278,7 +278,7 @@ static void *sbus_alloc_coherent(struct device *dev, size_t len,
 	}
 
 	order = get_order(len_total);
-	va = (void *)__get_free_pages(gfp, order);
+	va = get_free_pages(gfp, order);
 	if (!va)
 		goto err_nopages;
 
@@ -444,7 +444,7 @@ static void *pci32_alloc_coherent(struct device *dev, size_t len,
 	}
 
 	order = get_order(len_total);
-	va = (void *) __get_free_pages(gfp, order);
+	va = get_free_pages(gfp, order);
 	if (va == NULL) {
 		printk("pci_alloc_consistent: no %ld pages\n", len_total>>PAGE_SHIFT);
 		goto err_nopages;
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index e2d198d..8858bb0 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -1095,8 +1095,7 @@ static void __init irq_ivector_init(void)
 	ivecs = size_nr_ivec();
 	size = sizeof(struct ino_bucket) * ivecs;
 	order = get_order(size);
-	ivector_table = (struct ino_bucket *)
-		__get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
+	ivector_table = get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
 	if (!ivector_table) {
 		prom_printf("Fatal error, cannot allocate ivector_table\n");
 		prom_halt();
diff --git a/arch/sparc/kernel/ldc.c b/arch/sparc/kernel/ldc.c
index 1cba9b7..05fe8eb 100644
--- a/arch/sparc/kernel/ldc.c
+++ b/arch/sparc/kernel/ldc.c
@@ -975,7 +975,7 @@ static int alloc_queue(const char *name, unsigned long num_entries,
 	size = num_entries * LDC_PACKET_SIZE;
 	order = get_order(size);
 
-	q = (void *) __get_free_pages(GFP_KERNEL, order);
+	q = get_free_pages(GFP_KERNEL, order);
 	if (!q) {
 		printk(KERN_ERR PFX "Alloc of %s queue failed with "
 		       "size=%lu order=%lu\n", name, size, order);
@@ -1059,8 +1059,7 @@ static int ldc_iommu_init(const char *name, struct ldc_channel *lp)
 
 	order = get_order(tsbsize);
 
-	table = (struct ldc_mtable_entry *)
-		__get_free_pages(GFP_KERNEL, order);
+	table = get_free_pages(GFP_KERNEL, order);
 	err = -ENOMEM;
 	if (!table) {
 		printk(KERN_ERR PFX "Alloc of MTE table failed, "
diff --git a/arch/sparc/kernel/pci_fire.c b/arch/sparc/kernel/pci_fire.c
index ff44386..59c96bf 100644
--- a/arch/sparc/kernel/pci_fire.c
+++ b/arch/sparc/kernel/pci_fire.c
@@ -232,7 +232,7 @@ static int pci_fire_msiq_alloc(struct pci_pbm_info *pbm)
 	void *pages;
 
 	order = get_order(512 * 1024);
-	pages = (void *)__get_free_pages(GFP_KERNEL | __GFP_COMP, order);
+	pages = get_free_pages(GFP_KERNEL | __GFP_COMP, order);
 	if (!pages) {
 		printk(KERN_ERR "MSI: Cannot allocate MSI queues (o=%lu).\n",
 		       order);
diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c
index 9d84e4e..d700a73 100644
--- a/arch/sparc/kernel/pci_sun4v.c
+++ b/arch/sparc/kernel/pci_sun4v.c
@@ -753,7 +753,7 @@ static int pci_sun4v_msiq_alloc(struct pci_pbm_info *pbm)
 	q_size = pbm->msiq_ent_count * sizeof(struct pci_sun4v_msiq_entry);
 	alloc_size = (pbm->msiq_num * q_size);
 	order = get_order(alloc_size);
-	pages = (void *)__get_free_pages(GFP_KERNEL | __GFP_COMP, order);
+	pages = get_free_pages(GFP_KERNEL | __GFP_COMP, order);
 	if (!pages) {
 		printk(KERN_ERR "MSI: Cannot allocate MSI queues (o=%lu).\n",
 		       order);
diff --git a/arch/sparc/kernel/traps_64.c b/arch/sparc/kernel/traps_64.c
index d21cd62..cc04b28 100644
--- a/arch/sparc/kernel/traps_64.c
+++ b/arch/sparc/kernel/traps_64.c
@@ -872,8 +872,7 @@ void __init cheetah_ecache_flush_init(void)
 		if ((PAGE_SIZE << order) >= sz)
 			break;
 	}
-	cheetah_error_log = (struct cheetah_err_info *)
-		__get_free_pages(GFP_KERNEL, order);
+	cheetah_error_log = get_free_pages(GFP_KERNEL, order);
 	if (!cheetah_error_log) {
 		prom_printf("cheetah_ecache_flush_init: Failed to allocate "
 			    "error logging scoreboard (%d bytes).\n", sz);
diff --git a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c
index 504f60b..3d2ced3 100644
--- a/arch/um/drivers/net_kern.c
+++ b/arch/um/drivers/net_kern.c
@@ -880,7 +880,7 @@ void *get_output_buffer(int *len_out)
 {
 	void *ret;
 
-	ret = (void *) __get_free_pages(GFP_KERNEL, 0);
+	ret = get_free_pages(GFP_KERNEL, 0);
 	if (ret) *len_out = PAGE_SIZE;
 	else *len_out = 0;
 	return ret;
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c
index 69c8d56..05826e3 100644
--- a/arch/um/kernel/process.c
+++ b/arch/um/kernel/process.c
@@ -66,7 +66,7 @@ void *alloc_stack(int order, int atomic)
 
 	if (atomic)
 		flags = GFP_ATOMIC;
-	return (void *)__get_free_pages(flags, order);
+	return get_free_pages(flags, order);
 }
 
 static inline void set_current(struct task_struct *task)
diff --git a/arch/unicore32/mm/pgd.c b/arch/unicore32/mm/pgd.c
index 9485183..cf141a1c 100644
--- a/arch/unicore32/mm/pgd.c
+++ b/arch/unicore32/mm/pgd.c
@@ -30,7 +30,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm)
 	pmd_t *new_pmd, *init_pmd;
 	pte_t *new_pte, *init_pte;
 
-	new_pgd = (pgd_t *)__get_free_pages(GFP_KERNEL, 0);
+	new_pgd = get_free_pages(GFP_KERNEL, 0);
 	if (!new_pgd)
 		goto no_pgd;
 
diff --git a/arch/x86/include/asm/agp.h b/arch/x86/include/asm/agp.h
index 4f98370..84a43f3 100644
--- a/arch/x86/include/asm/agp.h
+++ b/arch/x86/include/asm/agp.h
@@ -24,7 +24,7 @@
 
 /* GATT allocation. Returns/accepts GATT kernel virtual address. */
 #define alloc_gatt_pages(order)		\
-	((char *)__get_free_pages(GFP_KERNEL, (order)))
+	((char *)get_free_pages(GFP_KERNEL, (order)))
 #define free_gatt_pages(table, order)	\
 	free_pages((table), (order))
 
diff --git a/arch/x86/include/asm/xen/page-coherent.h b/arch/x86/include/asm/xen/page-coherent.h
index 8a55a89..1de4d93 100644
--- a/arch/x86/include/asm/xen/page-coherent.h
+++ b/arch/x86/include/asm/xen/page-coherent.h
@@ -9,7 +9,7 @@ static inline void *xen_alloc_coherent_pages(struct device *hwdev, size_t size,
 		dma_addr_t *dma_handle, gfp_t flags,
 		struct dma_attrs *attrs)
 {
-	void *vstart = (void*)__get_free_pages(flags, get_order(size));
+	void *vstart = get_free_pages(flags, get_order(size));
 	*dma_handle = virt_to_phys(vstart);
 	return vstart;
 }
diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c
index 94da9dd..5bc0312 100644
--- a/arch/x86/kernel/amd_gart_64.c
+++ b/arch/x86/kernel/amd_gart_64.c
@@ -671,7 +671,7 @@ static __init int init_amd_gatt(struct agp_kern_info *info)
 	info->aper_size = aper_size >> 20;
 
 	gatt_size = (aper_size >> PAGE_SHIFT) * sizeof(u32);
-	gatt = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+	gatt = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 					get_order(gatt_size));
 	if (!gatt)
 		panic("Cannot allocate GATT table");
@@ -776,7 +776,7 @@ int __init gart_iommu_init(void)
 	iommu_size = check_iommu_size(info.aper_base, aper_size);
 	iommu_pages = iommu_size >> PAGE_SHIFT;
 
-	iommu_gart_bitmap = (void *) __get_free_pages(GFP_KERNEL | __GFP_ZERO,
+	iommu_gart_bitmap = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 						      get_order(iommu_pages/8));
 	if (!iommu_gart_bitmap)
 		panic("Cannot allocate iommu bitmap\n");
diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c
index 97e092d..738ed3e 100644
--- a/arch/x86/kernel/pci-calgary_64.c
+++ b/arch/x86/kernel/pci-calgary_64.c
@@ -446,7 +446,7 @@ static void* calgary_alloc_coherent(struct device *dev, size_t size,
 	flag &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32);
 
 	/* alloc enough pages (and possibly more) */
-	ret = (void *)__get_free_pages(flag, order);
+	ret = get_free_pages(flag, order);
 	if (!ret)
 		goto error;
 	memset(ret, 0, size);
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 493f541..bce45cf 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -89,7 +89,7 @@ __ref void *alloc_low_pages(unsigned int num)
 		unsigned int order;
 
 		order = get_order((unsigned long)num << PAGE_SHIFT);
-		return (void *)__get_free_pages(GFP_ATOMIC | __GFP_NOTRACK |
+		return get_free_pages(GFP_ATOMIC | __GFP_NOTRACK |
 						__GFP_ZERO, order);
 	}
 
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
index ed873dd..0478d9f 100644
--- a/arch/x86/platform/efi/efi.c
+++ b/arch/x86/platform/efi/efi.c
@@ -687,7 +687,7 @@ static void *realloc_pages(void *old_memmap, int old_shift)
 {
 	void *ret;
 
-	ret = (void *)__get_free_pages(GFP_KERNEL, old_shift + 1);
+	ret = get_free_pages(GFP_KERNEL, old_shift + 1);
 	if (!ret)
 		goto out;
 
diff --git a/arch/x86/um/ldt.c b/arch/x86/um/ldt.c
index 52e173d..5264f55 100644
--- a/arch/x86/um/ldt.c
+++ b/arch/x86/um/ldt.c
@@ -247,8 +247,7 @@ static void ldt_get_host_info(void)
 	for (i = LDT_PAGES_MAX-1, order=0; i; i>>=1, order++)
 		;
 
-	ldt = (struct ldt_entry *)
-	      __get_free_pages(GFP_KERNEL|__GFP_ZERO, order);
+	ldt = get_free_pages(GFP_KERNEL|__GFP_ZERO, order);
 	if (ldt == NULL) {
 		printk(KERN_ERR "ldt_get_host_info: couldn't allocate buffer "
 		       "for host ldt\n");
diff --git a/arch/xtensa/include/asm/pgalloc.h b/arch/xtensa/include/asm/pgalloc.h
index 022b9b3..2a7631f 100644
--- a/arch/xtensa/include/asm/pgalloc.h
+++ b/arch/xtensa/include/asm/pgalloc.h
@@ -30,7 +30,7 @@
 static inline pgd_t*
 pgd_alloc(struct mm_struct *mm)
 {
-	return (pgd_t*) __get_free_pages(GFP_KERNEL | __GFP_ZERO, PGD_ORDER);
+	return get_free_pages(GFP_KERNEL | __GFP_ZERO, PGD_ORDER);
 }
 
 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
diff --git a/crypto/xor.c b/crypto/xor.c
index 20060f8..e25b834 100644
--- a/crypto/xor.c
+++ b/crypto/xor.c
@@ -114,7 +114,7 @@ calibrate_xor_blocks(void)
 	 * test the XOR speed, we don't really want kmemcheck to warn about
 	 * reading uninitialized bytes here.
 	 */
-	b1 = (void *) __get_free_pages(GFP_KERNEL | __GFP_NOTRACK, 2);
+	b1 = get_free_pages(GFP_KERNEL | __GFP_NOTRACK, 2);
 	if (!b1) {
 		printk(KERN_WARNING "xor: Yikes!  No memory available.\n");
 		return -ENOMEM;
diff --git a/drivers/base/devres.c b/drivers/base/devres.c
index 414ac33..16876fa 100644
--- a/drivers/base/devres.c
+++ b/drivers/base/devres.c
@@ -947,7 +947,7 @@ void *devm_get_free_pages(struct device *dev,
 				  gfp_t gfp_mask, unsigned int order)
 {
 	struct pages_devres *devres;
-	void *addr = (void *)__get_free_pages(gfp_mask, order);
+	void *addr = get_free_pages(gfp_mask, order);
 
 	if (unlikely(!addr))
 		return 0;
diff --git a/drivers/block/ps3vram.c b/drivers/block/ps3vram.c
index db7ece5..9fbd9e8 100644
--- a/drivers/block/ps3vram.c
+++ b/drivers/block/ps3vram.c
@@ -644,8 +644,7 @@ static int ps3vram_probe(struct ps3_system_bus_device *dev)
 	ps3_system_bus_set_drvdata(dev, priv);
 
 	/* Allocate XDR buffer (1MiB aligned) */
-	priv->xdr_buf = (void *)__get_free_pages(GFP_KERNEL,
-		get_order(XDR_BUF_SIZE));
+	priv->xdr_buf = get_free_pages(GFP_KERNEL, get_order(XDR_BUF_SIZE));
 	if (priv->xdr_buf == NULL) {
 		dev_err(&dev->core, "Could not allocate XDR buffer\n");
 		error = -ENOMEM;
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index c5873c2..fa97cc3 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -1418,8 +1418,7 @@ static int setup_blkring(struct xenbus_device *dev,
 	for (i = 0; i < info->nr_ring_pages; i++)
 		info->ring_ref[i] = GRANT_INVALID_REF;
 
-	sring = (struct blkif_sring *)__get_free_pages(GFP_NOIO | __GFP_HIGH,
-						       get_order(ring_size));
+	sring = get_free_pages(GFP_NOIO | __GFP_HIGH, get_order(ring_size));
 	if (!sring) {
 		xenbus_dev_fatal(dev, -ENOMEM, "allocating shared ring");
 		return -ENOMEM;
diff --git a/drivers/block/zram/zcomp.c b/drivers/block/zram/zcomp.c
index efaa135..806546c 100644
--- a/drivers/block/zram/zcomp.c
+++ b/drivers/block/zram/zcomp.c
@@ -85,7 +85,7 @@ static struct zcomp_strm *zcomp_strm_alloc(struct zcomp *comp)
 	 * allocate 2 pages. 1 for compressed data, plus 1 extra for the
 	 * case when compressed size is larger than the original one
 	 */
-	zstrm->buffer = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, 1);
+	zstrm->buffer = get_free_pages(GFP_KERNEL | __GFP_ZERO, 1);
 	if (!zstrm->private || !zstrm->buffer) {
 		zcomp_strm_free(comp, zstrm);
 		zstrm = NULL;
diff --git a/drivers/char/agp/hp-agp.c b/drivers/char/agp/hp-agp.c
index 9f83f13..5a7fe5f 100644
--- a/drivers/char/agp/hp-agp.c
+++ b/drivers/char/agp/hp-agp.c
@@ -294,7 +294,7 @@ hp_zx1_create_gatt_table (struct agp_bridge_data *bridge)
 	int i;
 
 	if (hp->io_pdir_owner) {
-		hp->io_pdir = (u64 *) __get_free_pages(GFP_KERNEL,
+		hp->io_pdir = get_free_pages(GFP_KERNEL,
 						get_order(hp->io_pdir_size));
 		if (!hp->io_pdir) {
 			printk(KERN_ERR PFX "Couldn't allocate contiguous "
diff --git a/drivers/char/agp/uninorth-agp.c b/drivers/char/agp/uninorth-agp.c
index bcbe6a5..71d3f1a 100644
--- a/drivers/char/agp/uninorth-agp.c
+++ b/drivers/char/agp/uninorth-agp.c
@@ -390,7 +390,7 @@ static int uninorth_create_gatt_table(struct agp_bridge_data *bridge)
 		page_order = A_SIZE_32(temp)->page_order;
 		num_entries = A_SIZE_32(temp)->num_entries;
 
-		table = (char *) __get_free_pages(GFP_KERNEL, page_order);
+		table = get_free_pages(GFP_KERNEL, page_order);
 
 		if (table == NULL) {
 			i++;
diff --git a/drivers/crypto/atmel-aes.c b/drivers/crypto/atmel-aes.c
index bf75457..dc99f80 100644
--- a/drivers/crypto/atmel-aes.c
+++ b/drivers/crypto/atmel-aes.c
@@ -652,8 +652,8 @@ static int atmel_aes_buff_init(struct atmel_aes_dev *dd)
 {
 	int err = -ENOMEM;
 
-	dd->buf_in = (void *)__get_free_pages(GFP_KERNEL, 0);
-	dd->buf_out = (void *)__get_free_pages(GFP_KERNEL, 0);
+	dd->buf_in = get_free_pages(GFP_KERNEL, 0);
+	dd->buf_out = get_free_pages(GFP_KERNEL, 0);
 	dd->buflen = PAGE_SIZE;
 	dd->buflen &= ~(AES_BLOCK_SIZE - 1);
 
diff --git a/drivers/crypto/atmel-tdes.c b/drivers/crypto/atmel-tdes.c
index 0219027e..5f69db6 100644
--- a/drivers/crypto/atmel-tdes.c
+++ b/drivers/crypto/atmel-tdes.c
@@ -347,8 +347,8 @@ static int atmel_tdes_buff_init(struct atmel_tdes_dev *dd)
 {
 	int err = -ENOMEM;
 
-	dd->buf_in = (void *)__get_free_pages(GFP_KERNEL, 0);
-	dd->buf_out = (void *)__get_free_pages(GFP_KERNEL, 0);
+	dd->buf_in = get_free_pages(GFP_KERNEL, 0);
+	dd->buf_out = get_free_pages(GFP_KERNEL, 0);
 	dd->buflen = PAGE_SIZE;
 	dd->buflen &= ~(DES_BLOCK_SIZE - 1);
 
diff --git a/drivers/crypto/nx/nx-842.c b/drivers/crypto/nx/nx-842.c
index ce459cb..be7cdf6 100644
--- a/drivers/crypto/nx/nx-842.c
+++ b/drivers/crypto/nx/nx-842.c
@@ -117,8 +117,8 @@ int nx842_crypto_init(struct crypto_tfm *tfm, struct nx842_driver *driver)
 	spin_lock_init(&ctx->lock);
 	ctx->driver = driver;
 	ctx->wmem = kmalloc(driver->workmem_size, GFP_KERNEL);
-	ctx->sbounce = (u8 *)__get_free_pages(GFP_KERNEL, BOUNCE_BUFFER_ORDER);
-	ctx->dbounce = (u8 *)__get_free_pages(GFP_KERNEL, BOUNCE_BUFFER_ORDER);
+	ctx->sbounce = get_free_pages(GFP_KERNEL, BOUNCE_BUFFER_ORDER);
+	ctx->dbounce = get_free_pages(GFP_KERNEL, BOUNCE_BUFFER_ORDER);
 	if (!ctx->wmem || !ctx->sbounce || !ctx->dbounce) {
 		kfree(ctx->wmem);
 		free_page(ctx->sbounce);
diff --git a/drivers/crypto/omap-aes.c b/drivers/crypto/omap-aes.c
index cd41ce7..4c91b97 100644
--- a/drivers/crypto/omap-aes.c
+++ b/drivers/crypto/omap-aes.c
@@ -582,8 +582,8 @@ static int omap_aes_copy_sgs(struct omap_aes_dev *dd)
 	total = ALIGN(dd->total, AES_BLOCK_SIZE);
 	pages = get_order(total);
 
-	buf_in = (void *)__get_free_pages(GFP_ATOMIC, pages);
-	buf_out = (void *)__get_free_pages(GFP_ATOMIC, pages);
+	buf_in = get_free_pages(GFP_ATOMIC, pages);
+	buf_out = get_free_pages(GFP_ATOMIC, pages);
 
 	if (!buf_in || !buf_out) {
 		pr_err("Couldn't allocated pages for unaligned cases.\n");
diff --git a/drivers/crypto/omap-des.c b/drivers/crypto/omap-des.c
index 462f2bc..35c916e 100644
--- a/drivers/crypto/omap-des.c
+++ b/drivers/crypto/omap-des.c
@@ -563,8 +563,8 @@ static int omap_des_copy_sgs(struct omap_des_dev *dd)
 
 	BUG_ON(!pages);
 
-	buf_in = (void *)__get_free_pages(GFP_ATOMIC, pages);
-	buf_out = (void *)__get_free_pages(GFP_ATOMIC, pages);
+	buf_in = get_free_pages(GFP_ATOMIC, pages);
+	buf_out = get_free_pages(GFP_ATOMIC, pages);
 
 	if (!buf_in || !buf_out) {
 		pr_err("Couldn't allocated pages for unaligned cases.\n");
diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c
index e2e0225..287d468 100644
--- a/drivers/dma/ste_dma40.c
+++ b/drivers/dma/ste_dma40.c
@@ -3425,7 +3425,7 @@ static int __init d40_lcla_allocate(struct d40_base *base)
 	base->lcla_pool.pages = SZ_1K * base->num_phy_chans / PAGE_SIZE;
 
 	for (i = 0; i < MAX_LCLA_ALLOC_ATTEMPTS; i++) {
-		page_list[i] = (void *)__get_free_pages(GFP_KERNEL,
+		page_list[i] = get_free_pages(GFP_KERNEL,
 						base->lcla_pool.pages);
 		if (!page_list[i]) {
 
diff --git a/drivers/firmware/dell_rbu.c b/drivers/firmware/dell_rbu.c
index 7d1afaa..ba66b09 100644
--- a/drivers/firmware/dell_rbu.c
+++ b/drivers/firmware/dell_rbu.c
@@ -160,8 +160,7 @@ static int create_packet(void *data, size_t length)
 	}
 
 	while (!packet_data_temp_buf) {
-		packet_data_temp_buf = (unsigned char *)
-			__get_free_pages(GFP_KERNEL, ordernum);
+		packet_data_temp_buf = get_free_pages(GFP_KERNEL, ordernum);
 		if (!packet_data_temp_buf) {
 			printk(KERN_WARNING
 				"dell_rbu:%s: failed to allocate new "
@@ -434,8 +433,7 @@ static int img_update_realloc(unsigned long size)
 	spin_unlock(&rbu_data.lock);
 
 	ordernum = get_order(size);
-	image_update_buffer =
-		(unsigned char *) __get_free_pages(GFP_KERNEL, ordernum);
+	image_update_buffer = get_free_pages(GFP_KERNEL, ordernum);
 
 	img_buf_phys_addr =
 		(unsigned long) virt_to_phys(image_update_buffer);
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
index 8bb3671..82d206f 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
@@ -137,7 +137,7 @@ static bool allocate_signal_page(struct file *devkfd, struct kfd_process *p)
 
 	page->free_slots = SLOTS_PER_PAGE;
 
-	backing_store = (void *) __get_free_pages(GFP_KERNEL | __GFP_ZERO,
+	backing_store = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 					get_order(KFD_SIGNAL_EVENT_LIMIT * 8));
 	if (!backing_store)
 		goto fail_alloc_signal_store;
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index 0b65dc5..c06147c 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -94,11 +94,11 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size,
 				recv_ringbuffer_size));
 
 	if (!page)
-		out = (void *)__get_free_pages(GFP_KERNEL|__GFP_ZERO,
-					       get_order(send_ringbuffer_size +
+		out = get_free_pages(GFP_KERNEL|__GFP_ZERO,
+				       get_order(send_ringbuffer_size +
 					       recv_ringbuffer_size));
 	else
-		out = (void *)page_address(page);
+		out = page_address(page);
 
 	if (!out) {
 		err = -ENOMEM;
diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index 99cf9e9..1ec553d 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -152,8 +152,7 @@ int vmbus_connect(void)
 	 * Setup the vmbus event connection for channel interrupt
 	 * abstraction stuff
 	 */
-	vmbus_connection.int_page =
-	(void *)__get_free_pages(GFP_KERNEL|__GFP_ZERO, 0);
+	vmbus_connection.int_page = get_free_pages(GFP_KERNEL|__GFP_ZERO, 0);
 	if (vmbus_connection.int_page == NULL) {
 		ret = -ENOMEM;
 		goto cleanup;
@@ -168,8 +167,8 @@ int vmbus_connect(void)
 	 * Setup the monitor notification facility. The 1st page for
 	 * parent->child and the 2nd page for child->parent
 	 */
-	vmbus_connection.monitor_pages[0] = (void *)__get_free_pages((GFP_KERNEL|__GFP_ZERO), 0);
-	vmbus_connection.monitor_pages[1] = (void *)__get_free_pages((GFP_KERNEL|__GFP_ZERO), 0);
+	vmbus_connection.monitor_pages[0] = get_free_pages((GFP_KERNEL|__GFP_ZERO), 0);
+	vmbus_connection.monitor_pages[1] = get_free_pages((GFP_KERNEL|__GFP_ZERO), 0);
 	if ((vmbus_connection.monitor_pages[0] == NULL) ||
 	    (vmbus_connection.monitor_pages[1] == NULL)) {
 		ret = -ENOMEM;
diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
index ace59ca..a89b9d5 100644
--- a/drivers/iommu/amd_iommu_init.c
+++ b/drivers/iommu/amd_iommu_init.c
@@ -500,7 +500,7 @@ static int __init find_last_devid_acpi(struct acpi_table_header *table)
  */
 static int __init alloc_command_buffer(struct amd_iommu *iommu)
 {
-	iommu->cmd_buf = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+	iommu->cmd_buf = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 						  get_order(CMD_BUFFER_SIZE));
 
 	return iommu->cmd_buf ? 0 : -ENOMEM;
@@ -547,7 +547,7 @@ static void __init free_command_buffer(struct amd_iommu *iommu)
 /* allocates the memory where the IOMMU will log its events to */
 static int __init alloc_event_buffer(struct amd_iommu *iommu)
 {
-	iommu->evt_buf = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+	iommu->evt_buf = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 						  get_order(EVT_BUFFER_SIZE));
 
 	return iommu->evt_buf ? 0 : -ENOMEM;
@@ -579,7 +579,7 @@ static void __init free_event_buffer(struct amd_iommu *iommu)
 /* allocates the memory where the IOMMU will log its events to */
 static int __init alloc_ppr_log(struct amd_iommu *iommu)
 {
-	iommu->ppr_log = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+	iommu->ppr_log = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 						  get_order(PPR_LOG_SIZE));
 
 	return iommu->ppr_log ? 0 : -ENOMEM;
@@ -1833,7 +1833,7 @@ static int __init early_amd_iommu_init(void)
 
 	/* Device table - directly used by all IOMMUs */
 	ret = -ENOMEM;
-	amd_iommu_dev_table = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+	amd_iommu_dev_table = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 				      get_order(dev_table_size));
 	if (amd_iommu_dev_table == NULL)
 		goto out;
@@ -1842,19 +1842,19 @@ static int __init early_amd_iommu_init(void)
 	 * Alias table - map PCI Bus/Dev/Func to Bus/Dev/Func the
 	 * IOMMU see for that device
 	 */
-	amd_iommu_alias_table = (void *)__get_free_pages(GFP_KERNEL,
+	amd_iommu_alias_table = get_free_pages(GFP_KERNEL,
 			get_order(alias_table_size));
 	if (amd_iommu_alias_table == NULL)
 		goto out;
 
 	/* IOMMU rlookup table - find the IOMMU for a specific device */
-	amd_iommu_rlookup_table = (void *)__get_free_pages(
+	amd_iommu_rlookup_table = get_free_pages(
 			GFP_KERNEL | __GFP_ZERO,
 			get_order(rlookup_table_size));
 	if (amd_iommu_rlookup_table == NULL)
 		goto out;
 
-	amd_iommu_pd_alloc_bitmap = (void *)__get_free_pages(
+	amd_iommu_pd_alloc_bitmap = get_free_pages(
 					    GFP_KERNEL | __GFP_ZERO,
 					    get_order(MAX_DOMAIN_ID/8));
 	if (amd_iommu_pd_alloc_bitmap == NULL)
@@ -1898,7 +1898,7 @@ static int __init early_amd_iommu_init(void)
 		if (!amd_iommu_irq_cache)
 			goto out;
 
-		irq_lookup_table = (void *)__get_free_pages(
+		irq_lookup_table = get_free_pages(
 				GFP_KERNEL | __GFP_ZERO,
 				get_order(rlookup_table_size));
 		if (!irq_lookup_table)
diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
index 828a316..6d376c8 100644
--- a/drivers/iommu/exynos-iommu.c
+++ b/drivers/iommu/exynos-iommu.c
@@ -669,11 +669,11 @@ static struct iommu_domain *exynos_iommu_domain_alloc(unsigned type)
 	if (!domain)
 		return NULL;
 
-	domain->pgtable = (sysmmu_pte_t *)__get_free_pages(GFP_KERNEL, 2);
+	domain->pgtable = get_free_pages(GFP_KERNEL, 2);
 	if (!domain->pgtable)
 		goto err_pgtable;
 
-	domain->lv2entcnt = (short *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, 1);
+	domain->lv2entcnt = get_free_pages(GFP_KERNEL | __GFP_ZERO, 1);
 	if (!domain->lv2entcnt)
 		goto err_counter;
 
diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c
index 01afc79..2d9f859 100644
--- a/drivers/iommu/msm_iommu.c
+++ b/drivers/iommu/msm_iommu.c
@@ -227,8 +227,7 @@ static struct iommu_domain *msm_iommu_domain_alloc(unsigned type)
 		goto fail_nomem;
 
 	INIT_LIST_HEAD(&priv->list_attached);
-	priv->pgtable = (unsigned long *)__get_free_pages(GFP_KERNEL,
-							  get_order(SZ_16K));
+	priv->pgtable = get_free_pages(GFP_KERNEL, get_order(SZ_16K));
 
 	if (!priv->pgtable)
 		goto fail_nomem;
@@ -433,9 +432,8 @@ static int msm_iommu_map(struct iommu_domain *domain, unsigned long va,
 
 	/* Need a 2nd level table */
 	if ((len == SZ_4K || len == SZ_64K) && (*fl_pte) == 0) {
-		unsigned long *sl;
-		sl = (unsigned long *) __get_free_pages(GFP_ATOMIC,
-							get_order(SZ_4K));
+		unsigned long *sl = get_free_pages(GFP_ATOMIC,
+						   get_order(SZ_4K));
 
 		if (!sl) {
 			pr_debug("Could not allocate second level table\n");
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 2513a68..217765a 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -883,7 +883,7 @@ static int its_alloc_tables(const char *node_name, struct its_node *its)
 				node_name, order, alloc_pages);
 		}
 
-		base = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
+		base = get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
 		if (!base) {
 			err = -ENOMEM;
 			goto out_free;
diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c
index 3059674..22b8aaa 100644
--- a/drivers/md/bcache/bset.c
+++ b/drivers/md/bcache/bset.c
@@ -315,19 +315,19 @@ int bch_btree_keys_alloc(struct btree_keys *b, unsigned page_order, gfp_t gfp)
 
 	b->page_order = page_order;
 
-	t->data = (void *) __get_free_pages(gfp, b->page_order);
+	t->data = get_free_pages(gfp, b->page_order);
 	if (!t->data)
 		goto err;
 
 	t->tree = bset_tree_bytes(b) < PAGE_SIZE
 		? kmalloc(bset_tree_bytes(b), gfp)
-		: (void *) __get_free_pages(gfp, get_order(bset_tree_bytes(b)));
+		: get_free_pages(gfp, get_order(bset_tree_bytes(b)));
 	if (!t->tree)
 		goto err;
 
 	t->prev = bset_prev_bytes(b) < PAGE_SIZE
 		? kmalloc(bset_prev_bytes(b), gfp)
-		: (void *) __get_free_pages(gfp, get_order(bset_prev_bytes(b)));
+		: get_free_pages(gfp, get_order(bset_prev_bytes(b)));
 	if (!t->prev)
 		goto err;
 
@@ -1180,7 +1180,7 @@ static void __btree_sort(struct btree_keys *b, struct btree_iter *iter,
 {
 	uint64_t start_time;
 	bool used_mempool = false;
-	struct bset *out = (void *) __get_free_pages(__GFP_NOWARN|GFP_NOWAIT,
+	struct bset *out = get_free_pages(__GFP_NOWARN|GFP_NOWAIT,
 						     order);
 	if (!out) {
 		struct page *outp;
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index 1540114..9499bfb 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -792,8 +792,7 @@ int bch_btree_cache_alloc(struct cache_set *c)
 #ifdef CONFIG_BCACHE_DEBUG
 	mutex_init(&c->verify_lock);
 
-	c->verify_ondisk = (void *)
-		__get_free_pages(GFP_KERNEL, ilog2(bucket_pages(c)));
+	c->verify_ondisk = get_free_pages(GFP_KERNEL, ilog2(bucket_pages(c)));
 
 	c->verify_data = mca_bucket_alloc(c, &ZERO_KEY, GFP_KERNEL);
 
diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c
index 6ed9533..813def6 100644
--- a/drivers/md/bcache/journal.c
+++ b/drivers/md/bcache/journal.c
@@ -815,8 +815,8 @@ int bch_journal_alloc(struct cache_set *c)
 	j->w[1].c = c;
 
 	if (!(init_fifo(&j->pin, JOURNAL_PIN, GFP_KERNEL)) ||
-	    !(j->w[0].data = (void *) __get_free_pages(GFP_KERNEL, JSET_BITS)) ||
-	    !(j->w[1].data = (void *) __get_free_pages(GFP_KERNEL, JSET_BITS)))
+	    !(j->w[0].data = get_free_pages(GFP_KERNEL, JSET_BITS)) ||
+	    !(j->w[1].data = get_free_pages(GFP_KERNEL, JSET_BITS)))
 		return -ENOMEM;
 
 	return 0;
diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
index cd04e2d..2fb3624 100644
--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -1431,7 +1431,7 @@ void bch_cache_set_unregister(struct cache_set *c)
 }
 
 #define alloc_bucket_pages(gfp, c)			\
-	((void *) __get_free_pages(__GFP_ZERO|gfp, ilog2(bucket_pages(c))))
+	(get_free_pages(__GFP_ZERO|gfp, ilog2(bucket_pages(c))))
 
 struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
 {
diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
index 10f8a45..f2aae7e 100644
--- a/drivers/md/dm-bufio.c
+++ b/drivers/md/dm-bufio.c
@@ -380,8 +380,7 @@ static void *alloc_buffer_data(struct dm_bufio_client *c, gfp_t gfp_mask,
 	if (c->block_size <= DM_BUFIO_BLOCK_SIZE_GFP_LIMIT &&
 	    gfp_mask & __GFP_NORETRY) {
 		*data_mode = DATA_MODE_GET_FREE_PAGES;
-		return (void *)__get_free_pages(gfp_mask,
-						c->pages_per_block_bits);
+		return get_free_pages(gfp_mask, c->pages_per_block_bits);
 	}
 
 	*data_mode = DATA_MODE_VMALLOC;
diff --git a/drivers/media/pci/solo6x10/solo6x10-p2m.c b/drivers/media/pci/solo6x10/solo6x10-p2m.c
index ef91be9..85bdeac 100644
--- a/drivers/media/pci/solo6x10/solo6x10-p2m.c
+++ b/drivers/media/pci/solo6x10/solo6x10-p2m.c
@@ -221,11 +221,11 @@ static int solo_p2m_test(struct solo_dev *solo_dev, int base, int size)
 	int ret = -EIO;
 	int order = get_order(size);
 
-	wr_buf = (u32 *)__get_free_pages(GFP_KERNEL, order);
+	wr_buf = get_free_pages(GFP_KERNEL, order);
 	if (wr_buf == NULL)
 		return -1;
 
-	rd_buf = (u32 *)__get_free_pages(GFP_KERNEL, order);
+	rd_buf = get_free_pages(GFP_KERNEL, order);
 	if (rd_buf == NULL) {
 		free_pages(wr_buf, order);
 		return -1;
diff --git a/drivers/media/platform/davinci/dm644x_ccdc.c b/drivers/media/platform/davinci/dm644x_ccdc.c
index 42df06f..f816042 100644
--- a/drivers/media/platform/davinci/dm644x_ccdc.c
+++ b/drivers/media/platform/davinci/dm644x_ccdc.c
@@ -268,8 +268,7 @@ static int ccdc_update_raw_params(struct ccdc_config_params_raw *raw_params)
 		}
 
 		/* Allocate memory for FPC table */
-		fpc_virtaddr =
-			(unsigned int *)__get_free_pages(GFP_KERNEL | GFP_DMA,
+		fpc_virtaddr = get_free_pages(GFP_KERNEL | GFP_DMA,
 							 get_order(raw_params->
 							 fault_pxl.fp_num *
 							 FP_NUM_BYTES));
diff --git a/drivers/misc/cxl/native.c b/drivers/misc/cxl/native.c
index 4620627..6ff5696 100644
--- a/drivers/misc/cxl/native.c
+++ b/drivers/misc/cxl/native.c
@@ -195,8 +195,8 @@ int cxl_alloc_spa(struct cxl_afu *afu)
 
 	WARN_ON(afu->spa_size > 0x100000); /* Max size supported by the hardware */
 
-	if (!(afu->spa = (struct cxl_process_element *)
-	      __get_free_pages(GFP_KERNEL | __GFP_ZERO, afu->spa_order))) {
+	if (!(afu->spa = 
+	      get_free_pages(GFP_KERNEL | __GFP_ZERO, afu->spa_order))) {
 		pr_err("cxl_alloc_spa: Unable to allocate scheduled process area\n");
 		return -ENOMEM;
 	}
diff --git a/drivers/misc/mic/card/mic_virtio.c b/drivers/misc/mic/card/mic_virtio.c
index bb364ee..19e5731 100644
--- a/drivers/misc/mic/card/mic_virtio.c
+++ b/drivers/misc/mic/card/mic_virtio.c
@@ -279,7 +279,7 @@ static struct virtqueue *mic_find_vq(struct virtio_device *vdev,
 	mvdev->used_size[index] = PAGE_ALIGN(sizeof(__u16) * 3 +
 					     sizeof(struct vring_used_elem) *
 					     le16_to_cpu(config.num));
-	used = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+	used = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 					get_order(mvdev->used_size[index]));
 	if (!used) {
 		err = -ENOMEM;
diff --git a/drivers/misc/mic/host/mic_virtio.c b/drivers/misc/mic/host/mic_virtio.c
index 3474aa2..253c525 100644
--- a/drivers/misc/mic/host/mic_virtio.c
+++ b/drivers/misc/mic/host/mic_virtio.c
@@ -649,8 +649,7 @@ int mic_virtio_add_device(struct mic_vdev *mvdev,
 		mutex_init(&mvr->vr_mutex);
 		vr_size = PAGE_ALIGN(vring_size(num, MIC_VIRTIO_RING_ALIGN) +
 			sizeof(struct _mic_vring_info));
-		vr->va = (void *)
-			__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+		vr->va = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 					 get_order(vr_size));
 		if (!vr->va) {
 			ret = -ENOMEM;
@@ -688,7 +687,7 @@ int mic_virtio_add_device(struct mic_vdev *mvdev,
 		dev_dbg(&mdev->pdev->dev,
 			"%s %d index %d va %p info %p vr_size 0x%x\n",
 			__func__, __LINE__, i, vr->va, vr->info, vr_size);
-		mvr->buf = (void *)__get_free_pages(GFP_KERNEL,
+		mvr->buf = get_free_pages(GFP_KERNEL,
 					get_order(MIC_INT_DMA_BUF_SIZE));
 		mvr->buf_da = mic_map_single(mvdev->mdev, mvr->buf,
 					  MIC_INT_DMA_BUF_SIZE);
diff --git a/drivers/misc/mic/scif/scif_rma.h b/drivers/misc/mic/scif/scif_rma.h
index e13ab83..020073e 100644
--- a/drivers/misc/mic/scif/scif_rma.h
+++ b/drivers/misc/mic/scif/scif_rma.h
@@ -402,7 +402,7 @@ static inline void *scif_zalloc(size_t size)
 	size_t align = ALIGN(size, PAGE_SIZE);
 
 	if (align && get_order(align) < MAX_ORDER)
-		ret = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+		ret = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 					       get_order(align));
 	return ret ? ret : vzalloc(align);
 }
diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_main.h b/drivers/net/ethernet/cavium/liquidio/octeon_main.h
index b6a90a9..e053e4a 100644
--- a/drivers/net/ethernet/cavium/liquidio/octeon_main.h
+++ b/drivers/net/ethernet/cavium/liquidio/octeon_main.h
@@ -136,9 +136,7 @@ cnnic_alloc_aligned_dma(struct pci_dev *pci_dev,
 
 #define OCTEON_MAX_ALLOC_RETRIES     1
 	do {
-		ptr =
-		    (void *)__get_free_pages(GFP_KERNEL,
-					     get_order(size));
+		ptr = get_free_pages(GFP_KERNEL, get_order(size));
 		retries++;
 	} while ((retries <= OCTEON_MAX_ALLOC_RETRIES) && !ptr);
 
diff --git a/drivers/net/ethernet/sgi/ioc3-eth.c b/drivers/net/ethernet/sgi/ioc3-eth.c
index e314d3f..6a256b1 100644
--- a/drivers/net/ethernet/sgi/ioc3-eth.c
+++ b/drivers/net/ethernet/sgi/ioc3-eth.c
@@ -932,7 +932,7 @@ static void ioc3_alloc_rings(struct net_device *dev)
 
 	if (ip->txr == NULL) {
 		/* Allocate and initialize tx rings.  16kb = 128 bufs.  */
-		ip->txr = (struct ioc3_etxd *)__get_free_pages(GFP_KERNEL, 2);
+		ip->txr = get_free_pages(GFP_KERNEL, 2);
 		if (!ip->txr)
 			printk("ioc3_alloc_rings(): __get_free_pages() failed!\n");
 		ip->tx_pi = 0;
diff --git a/drivers/net/irda/au1k_ir.c b/drivers/net/irda/au1k_ir.c
index 6095cf4..ec4b640 100644
--- a/drivers/net/irda/au1k_ir.c
+++ b/drivers/net/irda/au1k_ir.c
@@ -229,7 +229,7 @@ static void *dma_alloc(size_t size, dma_addr_t *dma_handle)
 	void *ret;
 	int gfp = GFP_ATOMIC | GFP_DMA;
 
-	ret = (void *)__get_free_pages(gfp, get_order(size));
+	ret = get_free_pages(gfp, get_order(size));
 
 	if (ret != NULL) {
 		memset(ret, 0, size);
diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c
index d0c1b13..2d060ff 100644
--- a/drivers/net/rionet.c
+++ b/drivers/net/rionet.c
@@ -467,7 +467,7 @@ static int rionet_setup_netdev(struct rio_mport *mport, struct net_device *ndev)
 	const size_t rionet_active_bytes = sizeof(void *) *
 				RIO_MAX_ROUTE_ENTRIES(mport->sys_size);
 
-	nets[mport->id].active = (struct rio_dev **)__get_free_pages(GFP_KERNEL,
+	nets[mport->id].active = get_free_pages(GFP_KERNEL,
 						get_order(rionet_active_bytes));
 	if (!nets[mport->id].active) {
 		rc = -ENOMEM;
diff --git a/drivers/net/wireless/b43/debugfs.c b/drivers/net/wireless/b43/debugfs.c
index 50a2316..844e290 100644
--- a/drivers/net/wireless/b43/debugfs.c
+++ b/drivers/net/wireless/b43/debugfs.c
@@ -532,7 +532,7 @@ static ssize_t b43_debugfs_read(struct file *file, char __user *userbuf,
 	dfile = fops_to_dfs_file(dev, dfops);
 
 	if (!dfile->buffer) {
-		buf = (char *)__get_free_pages(GFP_KERNEL, buforder);
+		buf = get_free_pages(GFP_KERNEL, buforder);
 		if (!buf) {
 			err = -ENOMEM;
 			goto out_unlock;
diff --git a/drivers/net/wireless/b43legacy/debugfs.c b/drivers/net/wireless/b43legacy/debugfs.c
index e243955..371ece0 100644
--- a/drivers/net/wireless/b43legacy/debugfs.c
+++ b/drivers/net/wireless/b43legacy/debugfs.c
@@ -229,7 +229,7 @@ static ssize_t b43legacy_debugfs_read(struct file *file, char __user *userbuf,
 	dfile = fops_to_dfs_file(dev, dfops);
 
 	if (!dfile->buffer) {
-		buf = (char *)__get_free_pages(GFP_KERNEL, buforder);
+		buf = get_free_pages(GFP_KERNEL, buforder);
 		if (!buf) {
 			err = -ENOMEM;
 			goto out_unlock;
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
index 374adb1..ec979ba 100644
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -6309,7 +6309,7 @@ struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size, u32 aggr_buf_size,
 	init_completion(&wl->nvs_loading_complete);
 
 	order = get_order(aggr_buf_size);
-	wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
+	wl->aggr_buf = get_free_pages(GFP_KERNEL, order);
 	if (!wl->aggr_buf) {
 		ret = -ENOMEM;
 		goto err_wq;
diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c
index b172617..633c6d4 100644
--- a/drivers/parisc/ccio-dma.c
+++ b/drivers/parisc/ccio-dma.c
@@ -847,7 +847,7 @@ ccio_alloc_consistent(struct device *dev, size_t size, dma_addr_t *dma_handle, g
 		return 0;
 	}
 #endif
-        ret = (void *) __get_free_pages(flag, get_order(size));
+        ret = get_free_pages(flag, get_order(size));
 
 	if (ret) {
 		memset(ret, 0, size);
@@ -1299,8 +1299,7 @@ ccio_ioc_init(struct ioc *ioc)
 			iova_space_size>>20,
 			iov_order + PAGE_SHIFT);
 
-	ioc->pdir_base = (u64 *)__get_free_pages(GFP_KERNEL, 
-						 get_order(ioc->pdir_size));
+	ioc->pdir_base = get_free_pages(GFP_KERNEL, get_order(ioc->pdir_size));
 	if(NULL == ioc->pdir_base) {
 		panic("%s() could not allocate I/O Page Table\n", __func__);
 	}
@@ -1313,8 +1312,7 @@ ccio_ioc_init(struct ioc *ioc)
  	ioc->res_size = (ioc->pdir_size / sizeof(u64)) >> 3;
 	DBG_INIT("%s() res_size 0x%x\n", __func__, ioc->res_size);
 	
-	ioc->res_map = (u8 *)__get_free_pages(GFP_KERNEL, 
-					      get_order(ioc->res_size));
+	ioc->res_map = get_free_pages(GFP_KERNEL, get_order(ioc->res_size));
 	if(NULL == ioc->res_map) {
 		panic("%s() could not allocate resource map\n", __func__);
 	}
diff --git a/drivers/parisc/ccio-rm-dma.c b/drivers/parisc/ccio-rm-dma.c
index b9649c2..e4239f8 100644
--- a/drivers/parisc/ccio-rm-dma.c
+++ b/drivers/parisc/ccio-rm-dma.c
@@ -84,7 +84,7 @@ static void *ccio_alloc_consistent(struct pci_dev *dev, size_t size,
 {
 	void *ret;
 	
-	ret = (void *)__get_free_pages(GFP_ATOMIC, get_order(size));
+	ret = get_free_pages(GFP_ATOMIC, get_order(size));
 
 	if (ret != NULL) {
 		memset(ret, 0, size);
diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c
index 6066d4e..10ca71d 100644
--- a/drivers/parisc/sba_iommu.c
+++ b/drivers/parisc/sba_iommu.c
@@ -876,7 +876,7 @@ static void *sba_alloc_consistent(struct device *hwdev, size_t size,
 		return NULL;
 	}
 
-        ret = (void *) __get_free_pages(gfp, get_order(size));
+        ret = get_free_pages(gfp, get_order(size));
 
 	if (ret) {
 		memset(ret, 0, size);
@@ -1283,8 +1283,7 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
 		__func__, ioc->ioc_hpa, iova_space_size >> 20,
 		iov_order + PAGE_SHIFT);
 
-	ioc->pdir_base = (void *) __get_free_pages(GFP_KERNEL,
-						   get_order(ioc->pdir_size));
+	ioc->pdir_base = get_free_pages(GFP_KERNEL, get_order(ioc->pdir_size));
 	if (!ioc->pdir_base)
 		panic("Couldn't allocate I/O Page Table\n");
 
@@ -1697,7 +1696,7 @@ sba_common_init(struct sba_device *sba_dev)
 			__func__, res_size);
 
 		sba_dev->ioc[i].res_size = res_size;
-		sba_dev->ioc[i].res_map = (char *) __get_free_pages(GFP_KERNEL, get_order(res_size));
+		sba_dev->ioc[i].res_map = get_free_pages(GFP_KERNEL, get_order(res_size));
 
 #ifdef DEBUG_DMB_TRAP
 		iterate_pages( sba_dev->ioc[i].res_map, res_size,
diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c
index ba7fc9e..9d12ce1 100644
--- a/drivers/pci/host/pci-tegra.c
+++ b/drivers/pci/host/pci-tegra.c
@@ -1296,7 +1296,7 @@ static int tegra_pcie_enable_msi(struct tegra_pcie *pcie)
 	}
 
 	/* setup AFI/FPCI range */
-	msi->pages = (void *)__get_free_pages(GFP_KERNEL, 0);
+	msi->pages = get_free_pages(GFP_KERNEL, 0);
 	base = virt_to_phys(msi->pages);
 
 	afi_writel(pcie, base >> soc->msi_base_shift, AFI_MSI_FPCI_BAR_ST);
diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c
index 769fc9d..a46c493 100644
--- a/drivers/pci/host/pcie-designware.c
+++ b/drivers/pci/host/pcie-designware.c
@@ -206,7 +206,7 @@ void dw_pcie_msi_init(struct pcie_port *pp)
 {
 	u64 msi_target;
 
-	pp->msi_data = (void *)__get_free_pages(GFP_KERNEL, 0);
+	pp->msi_data = get_free_pages(GFP_KERNEL, 0);
 	msi_target = virt_to_phys(pp->msi_data);
 
 	/* program the msi_data */
diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
index fdeb72f..1cf7746 100644
--- a/drivers/pci/host/pcie-rcar.c
+++ b/drivers/pci/host/pcie-rcar.c
@@ -734,7 +734,7 @@ static int rcar_pcie_enable_msi(struct rcar_pcie *pcie)
 	}
 
 	/* setup MSI data target */
-	msi->pages = (void *)__get_free_pages(GFP_KERNEL, 0);
+	msi->pages = get_free_pages(GFP_KERNEL, 0);
 	base = virt_to_phys(msi->pages);
 
 	rcar_pci_write_reg(pcie, base | MSIFE, PCIEMSIALR);
diff --git a/drivers/pci/host/pcie-xilinx.c b/drivers/pci/host/pcie-xilinx.c
index 3cc679d..a31938b 100644
--- a/drivers/pci/host/pcie-xilinx.c
+++ b/drivers/pci/host/pcie-xilinx.c
@@ -353,7 +353,7 @@ static void xilinx_pcie_enable_msi(struct xilinx_pcie_port *port)
 {
 	phys_addr_t msg_addr;
 
-	port->msi_pages = (void *)__get_free_pages(GFP_KERNEL, 0);
+	port->msi_pages = get_free_pages(GFP_KERNEL, 0);
 	msg_addr = virt_to_phys(port->msi_pages);
 	pcie_write(port, 0x0, XILINX_PCIE_REG_MSIBASE1);
 	pcie_write(port, msg_addr, XILINX_PCIE_REG_MSIBASE2);
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 7b24131..ddab935 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -96,7 +96,7 @@ struct dasd_device *dasd_alloc_device(void)
 		return ERR_PTR(-ENOMEM);
 
 	/* Get two pages for normal block device operations. */
-	device->ccw_mem = (void *) __get_free_pages(GFP_ATOMIC | GFP_DMA, 1);
+	device->ccw_mem = get_free_pages(GFP_ATOMIC | GFP_DMA, 1);
 	if (!device->ccw_mem) {
 		kfree(device);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/s390/char/hmcdrv_cache.c b/drivers/s390/char/hmcdrv_cache.c
index 60a4233..98f049b 100644
--- a/drivers/s390/char/hmcdrv_cache.c
+++ b/drivers/s390/char/hmcdrv_cache.c
@@ -217,7 +217,7 @@ int hmcdrv_cache_startup(size_t cachesize)
 	if (cachesize > 0) { /* perform caching ? */
 		hmcdrv_cache_order = get_order(cachesize);
 		hmcdrv_cache_file.content =
-			(void *) __get_free_pages(GFP_KERNEL | GFP_DMA,
+			get_free_pages(GFP_KERNEL | GFP_DMA,
 						  hmcdrv_cache_order);
 
 		if (!hmcdrv_cache_file.content) {
diff --git a/drivers/s390/char/hmcdrv_ftp.c b/drivers/s390/char/hmcdrv_ftp.c
index c08e633..0ee0827 100644
--- a/drivers/s390/char/hmcdrv_ftp.c
+++ b/drivers/s390/char/hmcdrv_ftp.c
@@ -245,7 +245,7 @@ ssize_t hmcdrv_ftp_cmd(char __kernel *cmd, loff_t offset,
 		return retlen;
 
 	order = get_order(ftp.len);
-	ftp.buf = (void *) __get_free_pages(GFP_KERNEL | GFP_DMA, order);
+	ftp.buf = get_free_pages(GFP_KERNEL | GFP_DMA, order);
 
 	if (!ftp.buf)
 		return -ENOMEM;
diff --git a/drivers/s390/char/tty3270.c b/drivers/s390/char/tty3270.c
index bb61f97..f5c9599 100644
--- a/drivers/s390/char/tty3270.c
+++ b/drivers/s390/char/tty3270.c
@@ -690,8 +690,8 @@ tty3270_alloc_view(void)
 	tp->rcl_max = 20;
 
 	for (pages = 0; pages < TTY3270_STRING_PAGES; pages++) {
-		tp->freemem_pages[pages] = (void *)
-			__get_free_pages(GFP_KERNEL|GFP_DMA, 0);
+		tp->freemem_pages[pages] = 
+			get_free_pages(GFP_KERNEL|GFP_DMA, 0);
 		if (!tp->freemem_pages[pages])
 			goto out_pages;
 		add_string_memory(&tp->freemem,
diff --git a/drivers/s390/char/vmcp.c b/drivers/s390/char/vmcp.c
index f73bf6b..fea0a72 100644
--- a/drivers/s390/char/vmcp.c
+++ b/drivers/s390/char/vmcp.c
@@ -102,7 +102,7 @@ vmcp_write(struct file *file, const char __user *buff, size_t count,
 		return -ERESTARTSYS;
 	}
 	if (!session->response)
-		session->response = (char *)__get_free_pages(GFP_KERNEL
+		session->response = get_free_pages(GFP_KERNEL
 						| __GFP_REPEAT | GFP_DMA,
 						get_order(session->bufsize));
 	if (!session->response) {
diff --git a/drivers/s390/cio/cmf.c b/drivers/s390/cio/cmf.c
index 70356a3..6ee6ad6 100644
--- a/drivers/s390/cio/cmf.c
+++ b/drivers/s390/cio/cmf.c
@@ -572,7 +572,7 @@ static int alloc_cmb(struct ccw_device *cdev)
 		WARN_ON(!list_empty(&cmb_area.list));
 
 		spin_unlock(&cmb_area.lock);
-		mem = (void*)__get_free_pages(GFP_KERNEL | GFP_DMA,
+		mem = get_free_pages(GFP_KERNEL | GFP_DMA,
 				 get_order(size));
 		spin_lock(&cmb_area.lock);
 
diff --git a/drivers/scsi/cxlflash/main.c b/drivers/scsi/cxlflash/main.c
index d4d6e38..ff85994 100644
--- a/drivers/scsi/cxlflash/main.c
+++ b/drivers/scsi/cxlflash/main.c
@@ -763,7 +763,7 @@ static int alloc_mem(struct cxlflash_cfg *cfg)
 	struct device *dev = &cfg->dev->dev;
 
 	/* AFU is ~12k, i.e. only one 64k page or up to four 4k pages */
-	cfg->afu = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+	cfg->afu = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 					    get_order(sizeof(struct afu)));
 	if (unlikely(!cfg->afu)) {
 		dev_err(dev, "%s: cannot get %d free pages\n",
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index d03ab52..4513104 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -2912,8 +2912,7 @@ iscsi_conn_setup(struct iscsi_cls_session *cls_session, int dd_size,
 	}
 	spin_unlock_bh(&session->frwd_lock);
 
-	data = (char *) __get_free_pages(GFP_KERNEL,
-					 get_order(ISCSI_DEF_MAX_RECV_SEG_LEN));
+	data = get_free_pages(GFP_KERNEL, get_order(ISCSI_DEF_MAX_RECV_SEG_LEN));
 	if (!data)
 		goto login_task_data_alloc_fail;
 	conn->login_task->data = conn->data = data;
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 4d9457b..5447150 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -6233,8 +6233,7 @@ lpfc_setup_bg(struct lpfc_hba *phba, struct Scsi_Host *shost)
 	if (!_dump_buf_data) {
 		while (pagecnt) {
 			spin_lock_init(&_dump_buf_lock);
-			_dump_buf_data =
-				(char *) __get_free_pages(GFP_KERNEL, pagecnt);
+			_dump_buf_data = get_free_pages(GFP_KERNEL, pagecnt);
 			if (_dump_buf_data) {
 				lpfc_printf_log(phba, KERN_ERR, LOG_BG,
 					"9043 BLKGRD: allocated %d pages for "
@@ -6257,8 +6256,7 @@ lpfc_setup_bg(struct lpfc_hba *phba, struct Scsi_Host *shost)
 		       "\n", _dump_buf_data);
 	if (!_dump_buf_dif) {
 		while (pagecnt) {
-			_dump_buf_dif =
-				(char *) __get_free_pages(GFP_KERNEL, pagecnt);
+			_dump_buf_dif = get_free_pages(GFP_KERNEL, pagecnt);
 			if (_dump_buf_dif) {
 				lpfc_printf_log(phba, KERN_ERR, LOG_BG,
 					"9046 BLKGRD: allocated %d pages for "
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index 2c81ab3..56710df 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -5382,7 +5382,7 @@ static int megasas_probe_one(struct pci_dev *pdev,
 	{
 		instance->ctrl_context_pages =
 			get_order(sizeof(struct fusion_context));
-		instance->ctrl_context = (void *)__get_free_pages(GFP_KERNEL,
+		instance->ctrl_context = get_free_pages(GFP_KERNEL,
 				instance->ctrl_context_pages);
 		if (!instance->ctrl_context) {
 			dev_printk(KERN_DEBUG, &pdev->dev, "Failed to allocate "
diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
index 6429914..f11c3b7 100644
--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
@@ -1186,7 +1186,7 @@ megasas_init_adapter_fusion(struct megasas_instance *instance)
 	fusion->drv_map_pages = get_order(fusion->drv_map_sz);
 	for (i = 0; i < 2; i++) {
 		fusion->ld_map[i] = NULL;
-		fusion->ld_drv_map[i] = (void *)__get_free_pages(GFP_KERNEL,
+		fusion->ld_drv_map[i] = get_free_pages(GFP_KERNEL,
 			fusion->drv_map_pages);
 		if (!fusion->ld_drv_map[i]) {
 			dev_err(&instance->pdev->dev, "Could not allocate "
@@ -2462,7 +2462,7 @@ megasas_alloc_host_crash_buffer(struct megasas_instance *instance)
 
 	instance->crash_buf_pages = get_order(CRASH_DMA_BUF_SIZE);
 	for (i = 0; i < MAX_CRASH_DUMP_SIZE; i++) {
-		instance->crash_buf[i] = (void	*)__get_free_pages(GFP_KERNEL,
+		instance->crash_buf[i] = get_free_pages(GFP_KERNEL,
 				instance->crash_buf_pages);
 		if (!instance->crash_buf[i]) {
 			dev_info(&instance->pdev->dev, "Firmware crash dump "
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 0d73ea3..13e893a 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -3386,7 +3386,7 @@ _base_allocate_memory_pools(struct MPT3SAS_ADAPTER *ioc,  int sleep_flag)
 
 	sz = ioc->scsiio_depth * sizeof(struct scsiio_tracker);
 	ioc->scsi_lookup_pages = get_order(sz);
-	ioc->scsi_lookup = (struct scsiio_tracker *)__get_free_pages(
+	ioc->scsi_lookup = get_free_pages(
 	    GFP_KERNEL, ioc->scsi_lookup_pages);
 	if (!ioc->scsi_lookup) {
 		pr_err(MPT3SAS_FMT "scsi_lookup: get_free_pages failed, sz(%d)\n",
@@ -3400,8 +3400,7 @@ _base_allocate_memory_pools(struct MPT3SAS_ADAPTER *ioc,  int sleep_flag)
 	ioc->chain_depth = min_t(u32, ioc->chain_depth, MAX_CHAIN_DEPTH);
 	sz = ioc->chain_depth * sizeof(struct chain_tracker);
 	ioc->chain_pages = get_order(sz);
-	ioc->chain_lookup = (struct chain_tracker *)__get_free_pages(
-	    GFP_KERNEL, ioc->chain_pages);
+	ioc->chain_lookup = get_free_pages(GFP_KERNEL, ioc->chain_pages);
 	if (!ioc->chain_lookup) {
 		pr_err(MPT3SAS_FMT "chain_lookup: __get_free_pages failed\n",
 			ioc->name);
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.h b/drivers/scsi/sym53c8xx_2/sym_hipd.h
index 45f9ac2..6c0161e 100644
--- a/drivers/scsi/sym53c8xx_2/sym_hipd.h
+++ b/drivers/scsi/sym53c8xx_2/sym_hipd.h
@@ -1123,7 +1123,7 @@ bad:
  */
 
 #define sym_get_mem_cluster()	\
-	(void *) __get_free_pages(GFP_ATOMIC, SYM_MEM_PAGE_ORDER)
+	get_free_pages(GFP_ATOMIC, SYM_MEM_PAGE_ORDER)
 #define sym_free_mem_cluster(p)	\
 	free_pages(p, SYM_MEM_PAGE_ORDER)
 
diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c
index 7921fc8..16467b53 100644
--- a/drivers/scsi/vmw_pvscsi.c
+++ b/drivers/scsi/vmw_pvscsi.c
@@ -1251,8 +1251,7 @@ static int pvscsi_allocate_sg(struct pvscsi_adapter *adapter)
 	BUILD_BUG_ON(sizeof(struct pvscsi_sg_list) > SGL_SIZE);
 
 	for (i = 0; i < adapter->req_depth; ++i, ++ctx) {
-		ctx->sgl = (void *)__get_free_pages(GFP_KERNEL,
-						    get_order(SGL_SIZE));
+		ctx->sgl = get_free_pages(GFP_KERNEL, get_order(SGL_SIZE));
 		ctx->sglPA = 0;
 		BUG_ON(!IS_ALIGNED(((unsigned long)ctx->sgl), PAGE_SIZE));
 		if (!ctx->sgl) {
diff --git a/drivers/sh/maple/maple.c b/drivers/sh/maple/maple.c
index 84fa4f7..4495a56 100644
--- a/drivers/sh/maple/maple.c
+++ b/drivers/sh/maple/maple.c
@@ -738,8 +738,7 @@ static int maple_set_vblank_interrupt_handler(void)
 
 static int maple_get_dma_buffer(void)
 {
-	maple_sendbuf =
-	    (void *) __get_free_pages(GFP_KERNEL | __GFP_ZERO,
+	maple_sendbuf = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 				      MAPLE_DMA_PAGES);
 	if (!maple_sendbuf)
 		return -ENOMEM;
diff --git a/drivers/usb/core/devices.c b/drivers/usb/core/devices.c
index b741639..3163ae4 100644
--- a/drivers/usb/core/devices.c
+++ b/drivers/usb/core/devices.c
@@ -513,7 +513,7 @@ static ssize_t usb_device_dump(char __user **buffer, size_t *nbytes,
 		return 0;
 	/* allocate 2^1 pages = 8K (on i386);
 	 * should be more than enough for one device */
-	pages_start = (char *)__get_free_pages(GFP_NOIO, 1);
+	pages_start = get_free_pages(GFP_NOIO, 1);
 	if (!pages_start)
 		return -ENOMEM;
 
diff --git a/drivers/video/fbdev/fb-puv3.c b/drivers/video/fbdev/fb-puv3.c
index 88fa2e7..e6dfba5 100644
--- a/drivers/video/fbdev/fb-puv3.c
+++ b/drivers/video/fbdev/fb-puv3.c
@@ -671,7 +671,7 @@ static int unifb_probe(struct platform_device *dev)
 	struct resource *iomem;
 	void *videomemory;
 
-	videomemory = (void *)__get_free_pages(GFP_KERNEL | __GFP_COMP,
+	videomemory = get_free_pages(GFP_KERNEL | __GFP_COMP,
 				get_order(UNIFB_MEMSIZE));
 	if (!videomemory)
 		goto err;
diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c
index fa34808..ba475e1 100644
--- a/drivers/video/fbdev/ssd1307fb.c
+++ b/drivers/video/fbdev/ssd1307fb.c
@@ -592,7 +592,7 @@ static int ssd1307fb_probe(struct i2c_client *client,
 
 	vmem_size = par->width * par->height / 8;
 
-	vmem = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+	vmem = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 					get_order(vmem_size));
 	if (!vmem) {
 		dev_err(&client->dev, "Couldn't allocate graphical memory.\n");
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index 40c9ef6..459cb01731 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -1677,8 +1677,7 @@ int ceph_alloc_readdir_reply_buffer(struct ceph_mds_request *req,
 
 	order = get_order(size * num_entries);
 	while (order >= 0) {
-		rinfo->dir_in = (void*)__get_free_pages(GFP_KERNEL |
-							__GFP_NOWARN,
+		rinfo->dir_in = get_free_pages(GFP_KERNEL | __GFP_NOWARN,
 							order);
 		if (rinfo->dir_in)
 			break;
diff --git a/fs/configfs/file.c b/fs/configfs/file.c
index c4a3c5c..0fd6d8e 100644
--- a/fs/configfs/file.c
+++ b/fs/configfs/file.c
@@ -140,7 +140,7 @@ fill_write_buffer(struct configfs_buffer * buffer, const char __user * buf, size
 	int error;
 
 	if (!buffer->page)
-		buffer->page = (char *)__get_free_pages(GFP_KERNEL, 0);
+		buffer->page = get_free_pages(GFP_KERNEL, 0);
 	if (!buffer->page)
 		return -ENOMEM;
 
diff --git a/fs/hfs/mdb.c b/fs/hfs/mdb.c
index 92f1730..914a40e 100644
--- a/fs/hfs/mdb.c
+++ b/fs/hfs/mdb.c
@@ -166,7 +166,7 @@ int hfs_mdb_get(struct super_block *sb)
 		pr_warn("continuing without an alternate MDB\n");
 	}
 
-	HFS_SB(sb)->bitmap = (__be32 *)__get_free_pages(GFP_KERNEL, PAGE_SIZE < 8192 ? 1 : 0);
+	HFS_SB(sb)->bitmap = get_free_pages(GFP_KERNEL, PAGE_SIZE < 8192 ? 1 : 0);
 	if (!HFS_SB(sb)->bitmap)
 		goto out;
 
diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
index 450a30b..337faf2 100644
--- a/fs/jbd2/journal.c
+++ b/fs/jbd2/journal.c
@@ -2301,12 +2301,12 @@ void *jbd2_alloc(size_t size, gfp_t flags)
 
 	flags |= __GFP_REPEAT;
 	if (size == PAGE_SIZE)
-		ptr = (void *)__get_free_pages(flags, 0);
+		ptr = get_free_pages(flags, 0);
 	else if (size > PAGE_SIZE) {
 		int order = get_order(size);
 
 		if (order < 3)
-			ptr = (void *)__get_free_pages(flags, order);
+			ptr = get_free_pages(flags, order);
 		else
 			ptr = vmalloc(size);
 	} else
diff --git a/fs/nilfs2/ioctl.c b/fs/nilfs2/ioctl.c
index 09d2ede..da2c0ee 100644
--- a/fs/nilfs2/ioctl.c
+++ b/fs/nilfs2/ioctl.c
@@ -84,7 +84,7 @@ static int nilfs_ioctl_wrap_copy(struct the_nilfs *nilfs,
 	if (argv->v_index > ~(__u64)0 - argv->v_nmembs)
 		return -EINVAL;
 
-	buf = (void *)__get_free_pages(GFP_NOFS, 0);
+	buf = get_free_pages(GFP_NOFS, 0);
 	if (unlikely(!buf))
 		return -ENOMEM;
 	maxmembs = PAGE_SIZE / argv->v_size;
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index dd6566c..b4cf217 100644
--- a/fs/proc/vmcore.c
+++ b/fs/proc/vmcore.c
@@ -1027,7 +1027,7 @@ static int __init parse_crash_elf64_headers(void)
 	elfcorebuf_sz_orig = sizeof(Elf64_Ehdr) +
 				ehdr.e_phnum * sizeof(Elf64_Phdr);
 	elfcorebuf_sz = elfcorebuf_sz_orig;
-	elfcorebuf = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+	elfcorebuf = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 					      get_order(elfcorebuf_sz_orig));
 	if (!elfcorebuf)
 		return -ENOMEM;
@@ -1082,7 +1082,7 @@ static int __init parse_crash_elf32_headers(void)
 	/* Read in all elf headers. */
 	elfcorebuf_sz_orig = sizeof(Elf32_Ehdr) + ehdr.e_phnum * sizeof(Elf32_Phdr);
 	elfcorebuf_sz = elfcorebuf_sz_orig;
-	elfcorebuf = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+	elfcorebuf = get_free_pages(GFP_KERNEL | __GFP_ZERO,
 					      get_order(elfcorebuf_sz_orig));
 	if (!elfcorebuf)
 		return -ENOMEM;
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
index ef0d64b..b814eeb 100644
--- a/fs/quota/dquot.c
+++ b/fs/quota/dquot.c
@@ -2894,7 +2894,7 @@ static int __init dquot_init(void)
 			NULL);
 
 	order = 0;
-	dquot_hash = (struct hlist_head *)__get_free_pages(GFP_ATOMIC, order);
+	dquot_hash = get_free_pages(GFP_ATOMIC, order);
 	if (!dquot_hash)
 		panic("Cannot create dquot hash table");
 
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 927cdd4..1d42951 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2924,7 +2924,7 @@ static int ftrace_allocate_records(struct ftrace_page *pg, int count)
 		order--;
 
  again:
-	pg->records = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
+	pg->records = get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
 
 	if (!pg->records) {
 		/* if we can't allocate this size, try something smaller */
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 5d06111..0a0a08e 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -1640,8 +1640,7 @@ ftrace_event_pid_write(struct file *filp, const char __user *ubuf,
 			else
 				pid_list->order = 0;
 
-			pid_list->pids = (void *)__get_free_pages(GFP_KERNEL,
-								  pid_list->order);
+			pid_list->pids = get_free_pages(GFP_KERNEL, pid_list->order);
 			if (!pid_list->pids)
 				break;
 
@@ -1656,8 +1655,7 @@ ftrace_event_pid_write(struct file *filp, const char __user *ubuf,
 		if (pid_list->nr_pids >= max_pids(pid_list)) {
 			pid_t *pid_page;
 
-			pid_page = (void *)__get_free_pages(GFP_KERNEL,
-							    pid_list->order + 1);
+			pid_page = get_free_pages(GFP_KERNEL, pid_list->order + 1);
 			if (!pid_page)
 				break;
 			memcpy(pid_page, pid_list->pids,
diff --git a/lib/percpu_ida.c b/lib/percpu_ida.c
index d58f5a9..ef95209 100644
--- a/lib/percpu_ida.c
+++ b/lib/percpu_ida.c
@@ -303,7 +303,7 @@ int __percpu_ida_init(struct percpu_ida *pool, unsigned long nr_tags,
 	}
 
 	order = get_order(nr_tags * sizeof(unsigned));
-	pool->freelist = (void *) __get_free_pages(GFP_KERNEL, order);
+	pool->freelist = get_free_pages(GFP_KERNEL, order);
 	if (!pool->freelist)
 		return -ENOMEM;
 
diff --git a/lib/raid6/algos.c b/lib/raid6/algos.c
index 3d8cf31..c98026d 100644
--- a/lib/raid6/algos.c
+++ b/lib/raid6/algos.c
@@ -218,7 +218,7 @@ int __init raid6_select_algo(void)
 		dptrs[i] = ((char *)raid6_gfmul) + PAGE_SIZE*i;
 
 	/* Normal code - use a 2-page allocation to avoid D$ conflict */
-	syndromes = (void *) __get_free_pages(GFP_KERNEL, 1);
+	syndromes = get_free_pages(GFP_KERNEL, 1);
 
 	if (!syndromes) {
 		pr_err("raid6: Yikes!  No memory available.\n");
diff --git a/lib/swiotlb.c b/lib/swiotlb.c
index 87e33e7..456e38d 100644
--- a/lib/swiotlb.c
+++ b/lib/swiotlb.c
@@ -260,7 +260,7 @@ swiotlb_late_init_with_default_size(size_t default_size)
 	bytes = io_tlb_nslabs << IO_TLB_SHIFT;
 
 	while ((SLABS_PER_PAGE << order) > IO_TLB_MIN_SLABS) {
-		vstart = (void *)__get_free_pages(GFP_DMA | __GFP_NOWARN,
+		vstart = get_free_pages(GFP_DMA | __GFP_NOWARN,
 						  order);
 		if (vstart)
 			break;
@@ -299,8 +299,7 @@ swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs)
 	/*
 	 * Get the overflow emergency buffer
 	 */
-	v_overflow_buffer = (void *)__get_free_pages(GFP_DMA,
-						     get_order(io_tlb_overflow));
+	v_overflow_buffer = get_free_pages(GFP_DMA, get_order(io_tlb_overflow));
 	if (!v_overflow_buffer)
 		goto cleanup2;
 
@@ -311,13 +310,12 @@ swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs)
 	 * to find contiguous free memory regions of size up to IO_TLB_SEGSIZE
 	 * between io_tlb_start and io_tlb_end.
 	 */
-	io_tlb_list = (unsigned int *)__get_free_pages(GFP_KERNEL,
+	io_tlb_list = get_free_pages(GFP_KERNEL,
 	                              get_order(io_tlb_nslabs * sizeof(int)));
 	if (!io_tlb_list)
 		goto cleanup3;
 
-	io_tlb_orig_addr = (phys_addr_t *)
-		__get_free_pages(GFP_KERNEL,
+	io_tlb_orig_addr = get_free_pages(GFP_KERNEL,
 				 get_order(io_tlb_nslabs *
 					   sizeof(phys_addr_t)));
 	if (!io_tlb_orig_addr)
@@ -634,7 +632,7 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size,
 	if (hwdev && hwdev->coherent_dma_mask)
 		dma_mask = hwdev->coherent_dma_mask;
 
-	ret = (void *)__get_free_pages(flags, order);
+	ret = get_free_pages(flags, order);
 	if (ret) {
 		dev_addr = swiotlb_virt_to_bus(hwdev, ret);
 		if (dev_addr + size - 1 > dma_mask) {
diff --git a/mm/memory.c b/mm/memory.c
index 8364c20..a3c4440 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -194,7 +194,7 @@ static bool tlb_next_batch(struct mmu_gather *tlb)
 	if (tlb->batch_count == MAX_GATHER_BATCH_COUNT)
 		return false;
 
-	batch = (void *)__get_free_pages(GFP_NOWAIT | __GFP_NOWARN, 0);
+	batch = get_free_pages(GFP_NOWAIT | __GFP_NOWARN, 0);
 	if (!batch)
 		return false;
 
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 9ab053f..a4d01ea 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3276,7 +3276,7 @@ EXPORT_SYMBOL(get_free_pages);
 
 void *get_zeroed_page(gfp_t gfp_mask)
 {
-	return (void *)__get_free_pages(gfp_mask | __GFP_ZERO, 0);
+	return get_free_pages(gfp_mask | __GFP_ZERO, 0);
 }
 EXPORT_SYMBOL(get_zeroed_page);
 
@@ -3481,7 +3481,7 @@ static void *make_alloc_exact(void *addr, unsigned int order,
 void *alloc_pages_exact(size_t size, gfp_t gfp_mask)
 {
 	unsigned int order = get_order(size);
-	void *addr = (void *)__get_free_pages(gfp_mask, order);
+	void *addr = get_free_pages(gfp_mask, order);
 	return make_alloc_exact(addr, order, size);
 }
 EXPORT_SYMBOL(alloc_pages_exact);
diff --git a/mm/slub.c b/mm/slub.c
index 5da985fe..c04a507 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -4206,7 +4206,7 @@ static int alloc_loc_track(struct loc_track *t, unsigned long max, gfp_t flags)
 
 	order = get_order(sizeof(struct location) * max);
 
-	l = (void *)__get_free_pages(flags, order);
+	l = get_free_pages(flags, order);
 	if (!l)
 		return 0;
 
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 6eb5170..621eaac 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -327,8 +327,7 @@ static struct neigh_hash_table *neigh_hash_alloc(unsigned int shift)
 	if (size <= PAGE_SIZE)
 		buckets = kzalloc(size, GFP_ATOMIC);
 	else
-		buckets = (struct neighbour __rcu **)
-			  __get_free_pages(GFP_ATOMIC | __GFP_ZERO,
+		buckets = get_free_pages(GFP_ATOMIC | __GFP_ZERO,
 					   get_order(size));
 	if (!buckets) {
 		kfree(ret);
diff --git a/net/dccp/proto.c b/net/dccp/proto.c
index b689ca8..77c2afe 100644
--- a/net/dccp/proto.c
+++ b/net/dccp/proto.c
@@ -1147,8 +1147,8 @@ static int __init dccp_init(void)
 		while (hash_size & (hash_size - 1))
 			hash_size--;
 		dccp_hashinfo.ehash_mask = hash_size - 1;
-		dccp_hashinfo.ehash = (struct inet_ehash_bucket *)
-			__get_free_pages(GFP_ATOMIC|__GFP_NOWARN, ehash_order);
+		dccp_hashinfo.ehash = 
+			get_free_pages(GFP_ATOMIC|__GFP_NOWARN, ehash_order);
 	} while (!dccp_hashinfo.ehash && --ehash_order > 0);
 
 	if (!dccp_hashinfo.ehash) {
@@ -1170,8 +1170,8 @@ static int __init dccp_init(void)
 		if ((dccp_hashinfo.bhash_size > (64 * 1024)) &&
 		    bhash_order > 0)
 			continue;
-		dccp_hashinfo.bhash = (struct inet_bind_hashbucket *)
-			__get_free_pages(GFP_ATOMIC|__GFP_NOWARN, bhash_order);
+		dccp_hashinfo.bhash =
+			get_free_pages(GFP_ATOMIC|__GFP_NOWARN, bhash_order);
 	} while (!dccp_hashinfo.bhash && --bhash_order >= 0);
 
 	if (!dccp_hashinfo.bhash) {
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c
index 607a14f..9aae75d 100644
--- a/net/decnet/dn_route.c
+++ b/net/decnet/dn_route.c
@@ -1894,8 +1894,7 @@ void __init dn_route_init(void)
 			sizeof(struct dn_rt_hash_bucket);
 		while(dn_rt_hash_mask & (dn_rt_hash_mask - 1))
 			dn_rt_hash_mask--;
-		dn_rt_hash_table = (struct dn_rt_hash_bucket *)
-			__get_free_pages(GFP_ATOMIC, order);
+		dn_rt_hash_table = get_free_pages(GFP_ATOMIC, order);
 	} while (dn_rt_hash_table == NULL && --order > 0);
 
 	if (!dn_rt_hash_table)
diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
index f69b6d9..fddffc1 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
@@ -840,8 +840,7 @@ static struct hlist_head *fib_info_hash_alloc(int bytes)
 	if (bytes <= PAGE_SIZE)
 		return kzalloc(bytes, GFP_KERNEL);
 	else
-		return (struct hlist_head *)
-			__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+		return get_free_pages(GFP_KERNEL | __GFP_ZERO,
 					 get_order(bytes));
 }
 
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index 5a80da65..9124509 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -1544,7 +1544,7 @@ void *nf_ct_alloc_hashtable(unsigned int *sizep, int nulls)
 	BUILD_BUG_ON(sizeof(struct hlist_nulls_head) != sizeof(struct hlist_head));
 	nr_slots = *sizep = roundup(*sizep, PAGE_SIZE / sizeof(struct hlist_nulls_head));
 	sz = nr_slots * sizeof(struct hlist_nulls_head);
-	hash = (void *)__get_free_pages(GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO,
+	hash = get_free_pages(GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO,
 					get_order(sz));
 	if (!hash)
 		hash = vzalloc(sz);
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index da6fba6..587eb78 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -340,7 +340,7 @@ static void *alloc_one_pg_vec_page(unsigned long order)
 	gfp_t gfp_flags = GFP_KERNEL | __GFP_COMP | __GFP_ZERO |
 			  __GFP_NOWARN | __GFP_NORETRY;
 
-	buffer = (void *)__get_free_pages(gfp_flags, order);
+	buffer = get_free_pages(gfp_flags, order);
 	if (buffer != NULL)
 		return buffer;
 
@@ -349,7 +349,7 @@ static void *alloc_one_pg_vec_page(unsigned long order)
 		return buffer;
 
 	gfp_flags &= ~__GFP_NORETRY;
-	return (void *)__get_free_pages(gfp_flags, order);
+	return get_free_pages(gfp_flags, order);
 }
 
 static void **alloc_pg_vec(struct netlink_sock *nlk,
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index fae2812..c1d1284 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -4013,7 +4013,7 @@ static char *alloc_one_pg_vec_page(unsigned long order)
 	gfp_t gfp_flags = GFP_KERNEL | __GFP_COMP |
 			  __GFP_ZERO | __GFP_NOWARN | __GFP_NORETRY;
 
-	buffer = (char *) __get_free_pages(gfp_flags, order);
+	buffer = get_free_pages(gfp_flags, order);
 	if (buffer)
 		return buffer;
 
@@ -4024,7 +4024,7 @@ static char *alloc_one_pg_vec_page(unsigned long order)
 
 	/* vmalloc failed, lets dig into swap here */
 	gfp_flags &= ~__GFP_NORETRY;
-	buffer = (char *) __get_free_pages(gfp_flags, order);
+	buffer = get_free_pages(gfp_flags, order);
 	if (buffer)
 		return buffer;
 
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index 1c9ff0b..4c854f0 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -628,8 +628,7 @@ static struct hlist_head *qdisc_class_hash_alloc(unsigned int n)
 	if (size <= PAGE_SIZE)
 		h = kmalloc(size, GFP_KERNEL);
 	else
-		h = (struct hlist_head *)
-			__get_free_pages(GFP_KERNEL, get_order(size));
+		h = get_free_pages(GFP_KERNEL, get_order(size));
 
 	if (h != NULL) {
 		for (i = 0; i < n; i++)
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
index 8dfdd0e..4e44dfd 100644
--- a/net/sctp/protocol.c
+++ b/net/sctp/protocol.c
@@ -1418,8 +1418,8 @@ static __init int sctp_init(void)
 					sizeof(struct sctp_hashbucket);
 		if ((sctp_assoc_hashsize > (64 * 1024)) && order > 0)
 			continue;
-		sctp_assoc_hashtable = (struct sctp_hashbucket *)
-			__get_free_pages(GFP_ATOMIC|__GFP_NOWARN, order);
+		sctp_assoc_hashtable = 
+			get_free_pages(GFP_ATOMIC|__GFP_NOWARN, order);
 	} while (!sctp_assoc_hashtable && --order > 0);
 	if (!sctp_assoc_hashtable) {
 		pr_err("Failed association hash alloc\n");
@@ -1451,8 +1451,8 @@ static __init int sctp_init(void)
 					sizeof(struct sctp_bind_hashbucket);
 		if ((sctp_port_hashsize > (64 * 1024)) && order > 0)
 			continue;
-		sctp_port_hashtable = (struct sctp_bind_hashbucket *)
-			__get_free_pages(GFP_ATOMIC|__GFP_NOWARN, order);
+		sctp_port_hashtable =
+			get_free_pages(GFP_ATOMIC|__GFP_NOWARN, order);
 	} while (!sctp_port_hashtable && --order > 0);
 	if (!sctp_port_hashtable) {
 		pr_err("Failed bind hash alloc\n");
diff --git a/net/sctp/ssnmap.c b/net/sctp/ssnmap.c
index 97b1939..e3e290c 100644
--- a/net/sctp/ssnmap.c
+++ b/net/sctp/ssnmap.c
@@ -59,8 +59,7 @@ struct sctp_ssnmap *sctp_ssnmap_new(__u16 in, __u16 out,
 	if (size <= KMALLOC_MAX_SIZE)
 		retval = kmalloc(size, gfp);
 	else
-		retval = (struct sctp_ssnmap *)
-			  __get_free_pages(gfp, get_order(size));
+		retval = get_free_pages(gfp, get_order(size));
 	if (!retval)
 		goto fail;
 
diff --git a/net/xfrm/xfrm_hash.c b/net/xfrm/xfrm_hash.c
index f19872e..47c40d3 100644
--- a/net/xfrm/xfrm_hash.c
+++ b/net/xfrm/xfrm_hash.c
@@ -21,8 +21,7 @@ struct hlist_head *xfrm_hash_alloc(unsigned int sz)
 	else if (hashdist)
 		n = vzalloc(sz);
 	else
-		n = (struct hlist_head *)
-			__get_free_pages(GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO,
+		n = get_free_pages(GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO,
 					 get_order(sz));
 
 	return n;
diff --git a/security/integrity/ima/ima_crypto.c b/security/integrity/ima/ima_crypto.c
index 96f416c..f52bf51 100644
--- a/security/integrity/ima/ima_crypto.c
+++ b/security/integrity/ima/ima_crypto.c
@@ -132,7 +132,7 @@ static void *ima_alloc_pages(loff_t max_size, size_t *allocated_size,
 		order = min(get_order(max_size), order);
 
 	for (; order; order--) {
-		ptr = (void *)__get_free_pages(gfp_mask, order);
+		ptr = get_free_pages(gfp_mask, order);
 		if (ptr) {
 			*allocated_size = PAGE_SIZE << order;
 			return ptr;
@@ -146,7 +146,7 @@ static void *ima_alloc_pages(loff_t max_size, size_t *allocated_size,
 	if (!last_warn)
 		gfp_mask |= __GFP_NOWARN;
 
-	ptr = (void *)__get_free_pages(gfp_mask, 0);
+	ptr = get_free_pages(gfp_mask, 0);
 	if (ptr) {
 		*allocated_size = PAGE_SIZE;
 		return ptr;
diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c
index 43ac8b5..3a0b54c 100644
--- a/sound/core/memalloc.c
+++ b/sound/core/memalloc.c
@@ -52,7 +52,7 @@ void *snd_malloc_pages(size_t size, gfp_t gfp_flags)
 		return NULL;
 	gfp_flags |= __GFP_COMP;	/* compound page lets parts be mapped */
 	pg = get_order(size);
-	return (void *) __get_free_pages(gfp_flags, pg);
+	return get_free_pages(gfp_flags, pg);
 }
 
 /**
diff --git a/sound/oss/dmabuf.c b/sound/oss/dmabuf.c
index 457755a..e7c45ab 100644
--- a/sound/oss/dmabuf.c
+++ b/sound/oss/dmabuf.c
@@ -91,7 +91,7 @@ static int sound_alloc_dmap(struct dma_buffparms *dmap)
 	while (start_addr == NULL && dmap->buffsize > PAGE_SIZE) {
 		for (sz = 0, size = PAGE_SIZE; size < dmap->buffsize; sz++, size <<= 1);
 		dmap->buffsize = PAGE_SIZE * (1 << sz);
-		start_addr = (char *) __get_free_pages(GFP_ATOMIC|GFP_DMA|__GFP_NOWARN, sz);
+		start_addr = get_free_pages(GFP_ATOMIC|GFP_DMA|__GFP_NOWARN, sz);
 		if (start_addr == NULL)
 			dmap->buffsize /= 2;
 	}
diff --git a/sound/usb/usx2y/usb_stream.c b/sound/usb/usx2y/usb_stream.c
index c423951..8ca8200 100644
--- a/sound/usb/usx2y/usb_stream.c
+++ b/sound/usb/usx2y/usb_stream.c
@@ -191,7 +191,7 @@ struct usb_stream *usb_stream_new(struct usb_stream_kernel *sk,
 	}
 
 	pg = get_order(read_size);
-	sk->s = (void *) __get_free_pages(GFP_KERNEL|__GFP_COMP|__GFP_ZERO, pg);
+	sk->s = get_free_pages(GFP_KERNEL|__GFP_COMP|__GFP_ZERO, pg);
 	if (!sk->s) {
 		snd_printk(KERN_WARNING "couldn't __get_free_pages()\n");
 		goto out;
@@ -210,8 +210,7 @@ struct usb_stream *usb_stream_new(struct usb_stream_kernel *sk,
 	sk->s->write_size = write_size;
 	pg = get_order(write_size);
 
-	sk->write_page =
-		(void *)__get_free_pages(GFP_KERNEL|__GFP_COMP|__GFP_ZERO, pg);
+	sk->write_page = get_free_pages(GFP_KERNEL|__GFP_COMP|__GFP_ZERO, pg);
 	if (!sk->write_page) {
 		snd_printk(KERN_WARNING "couldn't __get_free_pages()\n");
 		usb_stream_free(sk);
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 61/83] switch obvious cases to get_free_page()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (59 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 60/83] switch obvious cases to get_free_pages() Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 62/83] m68k: switch pte_alloc_one_kernel() " Al Viro
                   ` (22 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/alpha/include/asm/pgalloc.h                  |  4 ++--
 arch/alpha/kernel/srm_env.c                       |  4 ++--
 arch/alpha/mm/init.c                              |  2 +-
 arch/arc/kernel/setup.c                           |  2 +-
 arch/arc/kernel/troubleshoot.c                    |  4 ++--
 arch/arm/include/asm/pgalloc.h                    |  2 +-
 arch/arm/kvm/arm.c                                |  2 +-
 arch/arm/kvm/mmu.c                                |  4 ++--
 arch/arm64/include/asm/pgalloc.h                  |  6 +++---
 arch/arm64/mm/mmu.c                               |  2 +-
 arch/arm64/mm/pgd.c                               |  2 +-
 arch/blackfin/kernel/dma-mapping.c                |  2 +-
 arch/cris/include/asm/pgalloc.h                   |  2 +-
 arch/frv/mm/pgalloc.c                             |  2 +-
 arch/hexagon/include/asm/pgalloc.h                |  4 ++--
 arch/m32r/include/asm/pgalloc.h                   |  4 ++--
 arch/m68k/include/asm/mcf_pgalloc.h               |  2 +-
 arch/m68k/include/asm/motorola_pgalloc.h          |  2 +-
 arch/metag/include/asm/pgalloc.h                  |  2 +-
 arch/microblaze/mm/pgtable.c                      |  2 +-
 arch/mn10300/mm/pgtable.c                         |  2 +-
 arch/openrisc/include/asm/pgalloc.h               |  2 +-
 arch/openrisc/mm/ioremap.c                        |  2 +-
 arch/parisc/include/asm/pgalloc.h                 |  2 +-
 arch/powerpc/include/asm/pgalloc-64.h             |  2 +-
 arch/powerpc/kvm/e500.c                           |  2 +-
 arch/powerpc/kvm/e500mc.c                         |  2 +-
 arch/powerpc/mm/hugetlbpage.c                     |  2 +-
 arch/powerpc/mm/pgtable_32.c                      |  2 +-
 arch/powerpc/platforms/pseries/cmm.c              |  6 ++----
 arch/powerpc/platforms/pseries/iommu.c            |  4 ++--
 arch/s390/crypto/aes_s390.c                       |  2 +-
 arch/s390/crypto/des_s390.c                       |  2 +-
 arch/s390/crypto/prng.c                           |  2 +-
 arch/s390/kernel/kprobes.c                        |  2 +-
 arch/s390/kernel/topology.c                       |  2 +-
 arch/s390/mm/cmm.c                                |  5 ++---
 arch/s390/mm/maccess.c                            |  4 ++--
 arch/s390/mm/pgtable.c                            |  3 +--
 arch/tile/mm/elf.c                                |  2 +-
 arch/um/kernel/mem.c                              |  6 +++---
 arch/unicore32/include/asm/pgalloc.h              |  2 +-
 arch/x86/kvm/mmu.c                                |  2 +-
 arch/x86/kvm/vmx.c                                | 21 +++++++++------------
 arch/x86/mm/pgtable.c                             |  8 ++++----
 arch/x86/pci/pcbios.c                             |  2 +-
 arch/x86/um/ldt.c                                 |  3 +--
 arch/x86/xen/mmu.c                                |  2 +-
 arch/x86/xen/p2m.c                                |  2 +-
 arch/xtensa/include/asm/pgalloc.h                 |  2 +-
 block/partitions/check.c                          |  2 +-
 crypto/blkcipher.c                                |  2 +-
 crypto/tcrypt.c                                   |  4 ++--
 crypto/testmgr.c                                  |  2 +-
 drivers/acpi/nvs.c                                |  2 +-
 drivers/block/cciss.c                             |  2 +-
 drivers/block/drbd/drbd_main.c                    |  4 ++--
 drivers/char/agp/amd-k7-agp.c                     |  2 +-
 drivers/char/agp/ati-agp.c                        |  2 +-
 drivers/char/agp/sworks-agp.c                     |  2 +-
 drivers/char/mem.c                                |  4 ++--
 drivers/char/tpm/xen-tpmfront.c                   |  2 +-
 drivers/char/xilinx_hwicap/xilinx_hwicap.c        |  2 +-
 drivers/firewire/ohci.c                           |  2 +-
 drivers/gpu/drm/via/via_dmablit.c                 |  3 +--
 drivers/ide/ide-proc.c                            |  2 +-
 drivers/infiniband/core/umem.c                    |  4 ++--
 drivers/infiniband/core/umem_odp.c                |  2 +-
 drivers/infiniband/hw/cxgb3/iwch_provider.c       |  2 +-
 drivers/infiniband/hw/cxgb4/device.c              |  3 +--
 drivers/infiniband/hw/cxgb4/mem.c                 |  2 +-
 drivers/infiniband/hw/mlx4/mr.c                   |  2 +-
 drivers/infiniband/hw/mlx5/odp.c                  |  2 +-
 drivers/infiniband/hw/mthca/mthca_provider.c      |  2 +-
 drivers/infiniband/hw/usnic/usnic_uiom.c          |  2 +-
 drivers/input/misc/xen-kbdfront.c                 |  2 +-
 drivers/macintosh/rack-meter.c                    |  2 +-
 drivers/media/pci/pt1/pt1.c                       |  2 +-
 drivers/media/pci/ttpci/av7110_ca.c               |  2 +-
 drivers/misc/cxl/pci.c                            |  2 +-
 drivers/misc/ibmasm/ibmasmfs.c                    |  2 +-
 drivers/misc/lkdtm.c                              |  6 +++---
 drivers/mmc/host/tmio_mmc_dma.c                   |  2 +-
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c   |  2 +-
 drivers/net/ethernet/sfc/mcdi.c                   |  2 +-
 drivers/net/ethernet/toshiba/ps3_gelic_wireless.c | 12 ++++++------
 drivers/net/usb/kaweth.c                          |  2 +-
 drivers/pci/xen-pcifront.c                        |  3 +--
 drivers/platform/x86/dell-laptop.c                |  2 +-
 drivers/s390/block/dasd_eckd.c                    |  2 +-
 drivers/s390/block/xpram.c                        |  4 ++--
 drivers/s390/char/sclp_cmd.c                      |  2 +-
 drivers/s390/char/vmur.c                          |  4 ++--
 drivers/s390/char/zcore.c                         |  2 +-
 drivers/s390/cio/qdio_setup.c                     |  4 ++--
 drivers/s390/cio/scm.c                            |  2 +-
 drivers/s390/net/qeth_core_main.c                 |  2 +-
 drivers/scsi/cxlflash/main.c                      |  2 +-
 drivers/scsi/ipr.c                                |  2 +-
 drivers/scsi/scsi_devinfo.c                       |  2 +-
 drivers/scsi/scsi_proc.c                          |  4 ++--
 drivers/scsi/xen-scsifront.c                      |  2 +-
 drivers/spi/spi-sh-msiof.c                        |  4 ++--
 drivers/staging/lustre/lustre/llite/llite_lib.c   |  2 +-
 drivers/staging/unisys/visorbus/visorchannel.c    |  2 +-
 drivers/target/target_core_file.c                 |  2 +-
 drivers/tty/hvc/hvc_xen.c                         |  2 +-
 drivers/tty/hvc/hvcs.c                            |  2 +-
 drivers/tty/mxser.c                               |  2 +-
 drivers/tty/rocket.c                              |  2 +-
 drivers/tty/serial/68328serial.c                  |  2 +-
 drivers/tty/serial/men_z135_uart.c                |  2 +-
 drivers/tty/serial/pch_uart.c                     |  2 +-
 drivers/tty/vt/vc_screen.c                        |  4 ++--
 drivers/usb/atm/cxacru.c                          |  6 +++---
 drivers/usb/atm/speedtch.c                        |  2 +-
 drivers/usb/core/devio.c                          |  2 +-
 drivers/usb/misc/rio500.c                         |  4 ++--
 drivers/usb/serial/usb_wwan.c                     |  2 +-
 drivers/uwb/hwa-rc.c                              |  2 +-
 drivers/video/fbdev/xen-fbfront.c                 |  2 +-
 drivers/xen/events/events_base.c                  |  2 +-
 drivers/xen/events/events_fifo.c                  |  4 ++--
 drivers/xen/evtchn.c                              |  2 +-
 drivers/xen/grant-table.c                         |  4 ++--
 fs/binfmt_misc.c                                  |  2 +-
 fs/fuse/dir.c                                     |  2 +-
 fs/fuse/file.c                                    |  2 +-
 fs/isofs/dir.c                                    |  2 +-
 fs/jfs/jfs_dtree.c                                |  2 +-
 fs/namespace.c                                    |  2 +-
 fs/nfs/namespace.c                                |  2 +-
 fs/nfs/nfs4namespace.c                            |  8 ++++----
 fs/nfs/super.c                                    |  2 +-
 fs/nfsd/vfs.c                                     |  2 +-
 fs/ocfs2/dlm/dlmdomain.c                          |  2 +-
 fs/ocfs2/dlm/dlmmaster.c                          |  2 +-
 fs/ocfs2/dlm/dlmrecovery.c                        |  2 +-
 fs/overlayfs/copy_up.c                            |  2 +-
 fs/proc/base.c                                    | 10 +++++-----
 fs/select.c                                       |  2 +-
 include/linux/quicklist.h                         |  2 +-
 kernel/groups.c                                   |  2 +-
 kernel/power/swap.c                               | 13 ++++++-------
 kernel/sysctl.c                                   |  6 +++---
 kernel/trace/trace_events.c                       |  4 ++--
 kernel/trace/trace_events_filter.c                |  2 +-
 kernel/trace/trace_events_trigger.c               |  2 +-
 kernel/user_namespace.c                           |  2 +-
 lib/scatterlist.c                                 |  2 +-
 mm/memory.c                                       |  4 ++--
 mm/migrate.c                                      |  2 +-
 mm/mincore.c                                      |  2 +-
 net/atm/mpoa_proc.c                               |  2 +-
 security/selinux/hooks.c                          |  2 +-
 security/selinux/selinuxfs.c                      |  2 +-
 sound/oss/msnd_pinnacle.c                         |  4 ++--
 157 files changed, 221 insertions(+), 233 deletions(-)

diff --git a/arch/alpha/include/asm/pgalloc.h b/arch/alpha/include/asm/pgalloc.h
index 078da57..001da1d 100644
--- a/arch/alpha/include/asm/pgalloc.h
+++ b/arch/alpha/include/asm/pgalloc.h
@@ -40,7 +40,7 @@ pgd_free(struct mm_struct *mm, pgd_t *pgd)
 static inline pmd_t *
 pmd_alloc_one(struct mm_struct *mm, unsigned long address)
 {
-	pmd_t *ret = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
+	pmd_t *ret = get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
 	return ret;
 }
 
@@ -53,7 +53,7 @@ pmd_free(struct mm_struct *mm, pmd_t *pmd)
 static inline pte_t *
 pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
 {
-	pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
+	pte_t *pte = get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
 	return pte;
 }
 
diff --git a/arch/alpha/kernel/srm_env.c b/arch/alpha/kernel/srm_env.c
index a66f23b..14f8597 100644
--- a/arch/alpha/kernel/srm_env.c
+++ b/arch/alpha/kernel/srm_env.c
@@ -82,7 +82,7 @@ static int srm_env_proc_show(struct seq_file *m, void *v)
 	unsigned long	id = (unsigned long)m->private;
 	char		*page;
 
-	page = (char *)__get_free_page(GFP_USER);
+	page = get_free_page(GFP_USER);
 	if (!page)
 		return -ENOMEM;
 
@@ -107,7 +107,7 @@ static ssize_t srm_env_proc_write(struct file *file, const char __user *buffer,
 {
 	int res;
 	unsigned long	id = (unsigned long)PDE_DATA(file_inode(file));
-	char		*buf = (char *) __get_free_page(GFP_USER);
+	char		*buf = get_free_page(GFP_USER);
 	unsigned long	ret1, ret2;
 
 	if (!buf)
diff --git a/arch/alpha/mm/init.c b/arch/alpha/mm/init.c
index a1bea91..6a604df 100644
--- a/arch/alpha/mm/init.c
+++ b/arch/alpha/mm/init.c
@@ -42,7 +42,7 @@ pgd_alloc(struct mm_struct *mm)
 {
 	pgd_t *ret, *init;
 
-	ret = (pgd_t *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
+	ret = get_free_page(GFP_KERNEL | __GFP_ZERO);
 	init = pgd_offset(&init_mm, 0UL);
 	if (ret) {
 #ifdef CONFIG_ALPHA_LARGE_VMALLOC
diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c
index 56fd4fc..39cae4a 100644
--- a/arch/arc/kernel/setup.c
+++ b/arch/arc/kernel/setup.c
@@ -473,7 +473,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
 		goto done;
 	}
 
-	str = (char *)__get_free_page(GFP_TEMPORARY);
+	str = get_free_page(GFP_TEMPORARY);
 	if (!str)
 		goto done;
 
diff --git a/arch/arc/kernel/troubleshoot.c b/arch/arc/kernel/troubleshoot.c
index eb3464d..f09d68d 100644
--- a/arch/arc/kernel/troubleshoot.c
+++ b/arch/arc/kernel/troubleshoot.c
@@ -175,7 +175,7 @@ void show_regs(struct pt_regs *regs)
 	struct callee_regs *cregs;
 	char *buf;
 
-	buf = (char *)__get_free_page(GFP_TEMPORARY);
+	buf = get_free_page(GFP_TEMPORARY);
 	if (!buf)
 		return;
 
@@ -272,7 +272,7 @@ static int fill_display_data(char *kbuf)
 
 static int tlb_stats_open(struct inode *inode, struct file *file)
 {
-	file->private_data = (void *)__get_free_page(GFP_KERNEL);
+	file->private_data = get_free_page(GFP_KERNEL);
 	return 0;
 }
 
diff --git a/arch/arm/include/asm/pgalloc.h b/arch/arm/include/asm/pgalloc.h
index 540647d..aafdebc 100644
--- a/arch/arm/include/asm/pgalloc.h
+++ b/arch/arm/include/asm/pgalloc.h
@@ -85,7 +85,7 @@ pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
 {
 	pte_t *pte;
 
-	pte = (pte_t *)__get_free_page(PGALLOC_GFP);
+	pte = get_free_page(PGALLOC_GFP);
 	if (pte)
 		clean_pte_table(pte);
 
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
index 385bdce..56b066f 100644
--- a/arch/arm/kvm/arm.c
+++ b/arch/arm/kvm/arm.c
@@ -1046,7 +1046,7 @@ static int init_hyp_mode(void)
 	 * Allocate stack pages for Hypervisor-mode
 	 */
 	for_each_possible_cpu(cpu) {
-		void *stack_page = (void *)__get_free_page(GFP_KERNEL);
+		void *stack_page = get_free_page(GFP_KERNEL);
 		if (!stack_page) {
 			err = -ENOMEM;
 			goto out_free_stack_pages;
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
index 429b673..34c2de6 100644
--- a/arch/arm/kvm/mmu.c
+++ b/arch/arm/kvm/mmu.c
@@ -131,7 +131,7 @@ static int mmu_topup_memory_cache(struct kvm_mmu_memory_cache *cache,
 	if (cache->nobjs >= min)
 		return 0;
 	while (cache->nobjs < max) {
-		page = (void *)__get_free_page(PGALLOC_GFP);
+		page = get_free_page(PGALLOC_GFP);
 		if (!page)
 			return -ENOMEM;
 		cache->objects[cache->nobjs++] = page;
@@ -1679,7 +1679,7 @@ int kvm_mmu_init(void)
 	}
 
 	if (__kvm_cpu_uses_extended_idmap()) {
-		merged_hyp_pgd = (pgd_t *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
+		merged_hyp_pgd = get_free_page(GFP_KERNEL | __GFP_ZERO);
 		if (!merged_hyp_pgd) {
 			kvm_err("Failed to allocate extra HYP pgd\n");
 			goto out;
diff --git a/arch/arm64/include/asm/pgalloc.h b/arch/arm64/include/asm/pgalloc.h
index ce9b3c0..5bfbe35 100644
--- a/arch/arm64/include/asm/pgalloc.h
+++ b/arch/arm64/include/asm/pgalloc.h
@@ -33,7 +33,7 @@
 
 static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
 {
-	return (pmd_t *)__get_free_page(PGALLOC_GFP);
+	return get_free_page(PGALLOC_GFP);
 }
 
 static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
@@ -53,7 +53,7 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
 
 static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
 {
-	return (pud_t *)__get_free_page(PGALLOC_GFP);
+	return get_free_page(PGALLOC_GFP);
 }
 
 static inline void pud_free(struct mm_struct *mm, pud_t *pud)
@@ -75,7 +75,7 @@ extern void pgd_free(struct mm_struct *mm, pgd_t *pgd);
 static inline pte_t *
 pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
 {
-	return (pte_t *)__get_free_page(PGALLOC_GFP);
+	return get_free_page(PGALLOC_GFP);
 }
 
 static inline pgtable_t
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index 873e363..753b6cb 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -267,7 +267,7 @@ static void *late_alloc(unsigned long size)
 	void *ptr;
 
 	BUG_ON(size > PAGE_SIZE);
-	ptr = (void *)__get_free_page(PGALLOC_GFP);
+	ptr = get_free_page(PGALLOC_GFP);
 	BUG_ON(!ptr);
 	return ptr;
 }
diff --git a/arch/arm64/mm/pgd.c b/arch/arm64/mm/pgd.c
index a468648..d5574e5 100644
--- a/arch/arm64/mm/pgd.c
+++ b/arch/arm64/mm/pgd.c
@@ -33,7 +33,7 @@ static struct kmem_cache *pgd_cache;
 pgd_t *pgd_alloc(struct mm_struct *mm)
 {
 	if (PGD_SIZE == PAGE_SIZE)
-		return (pgd_t *)__get_free_page(PGALLOC_GFP);
+		return get_free_page(PGALLOC_GFP);
 	else
 		return kmem_cache_alloc(pgd_cache, PGALLOC_GFP);
 }
diff --git a/arch/blackfin/kernel/dma-mapping.c b/arch/blackfin/kernel/dma-mapping.c
index df437e5..aa71d9b 100644
--- a/arch/blackfin/kernel/dma-mapping.c
+++ b/arch/blackfin/kernel/dma-mapping.c
@@ -27,7 +27,7 @@ static void dma_alloc_init(unsigned long start, unsigned long end)
 	spin_lock_init(&dma_page_lock);
 	dma_initialized = 0;
 
-	dma_page = (unsigned long *)__get_free_page(GFP_KERNEL);
+	dma_page = get_free_page(GFP_KERNEL);
 	memset(dma_page, 0, PAGE_SIZE);
 	dma_base = PAGE_ALIGN(start);
 	dma_size = PAGE_ALIGN(end) - PAGE_ALIGN(start);
diff --git a/arch/cris/include/asm/pgalloc.h b/arch/cris/include/asm/pgalloc.h
index cac8206..65e3f32 100644
--- a/arch/cris/include/asm/pgalloc.h
+++ b/arch/cris/include/asm/pgalloc.h
@@ -24,7 +24,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 
 static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
 {
-  	pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
+  	pte_t *pte = get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
  	return pte;
 }
 
diff --git a/arch/frv/mm/pgalloc.c b/arch/frv/mm/pgalloc.c
index 41907d2..16addf2 100644
--- a/arch/frv/mm/pgalloc.c
+++ b/arch/frv/mm/pgalloc.c
@@ -22,7 +22,7 @@ pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__((aligned(PAGE_SIZE)));
 
 pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
 {
-	pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
+	pte_t *pte = get_free_page(GFP_KERNEL|__GFP_REPEAT);
 	if (pte)
 		clear_page(pte);
 	return pte;
diff --git a/arch/hexagon/include/asm/pgalloc.h b/arch/hexagon/include/asm/pgalloc.h
index 48c04dc..ca48fcf 100644
--- a/arch/hexagon/include/asm/pgalloc.h
+++ b/arch/hexagon/include/asm/pgalloc.h
@@ -35,7 +35,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 {
 	pgd_t *pgd;
 
-	pgd = (pgd_t *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
+	pgd = get_free_page(GFP_KERNEL | __GFP_ZERO);
 
 	/*
 	 * There may be better ways to do this, but to ensure
@@ -79,7 +79,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 					  unsigned long address)
 {
 	gfp_t flags =  GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO;
-	return (pte_t *) __get_free_page(flags);
+	return get_free_page(flags);
 }
 
 static inline void pte_free(struct mm_struct *mm, struct page *pte)
diff --git a/arch/m32r/include/asm/pgalloc.h b/arch/m32r/include/asm/pgalloc.h
index 3923429..80d1b26 100644
--- a/arch/m32r/include/asm/pgalloc.h
+++ b/arch/m32r/include/asm/pgalloc.h
@@ -20,7 +20,7 @@ static __inline__ void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
  */
 static __inline__ pgd_t *pgd_alloc(struct mm_struct *mm)
 {
-	pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
+	pgd_t *pgd = get_free_page(GFP_KERNEL|__GFP_ZERO);
 
 	return pgd;
 }
@@ -33,7 +33,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 static __inline__ pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 	unsigned long address)
 {
-	pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
+	pte_t *pte = get_free_page(GFP_KERNEL|__GFP_ZERO);
 
 	return pte;
 }
diff --git a/arch/m68k/include/asm/mcf_pgalloc.h b/arch/m68k/include/asm/mcf_pgalloc.h
index 2e70a56..04ffc22 100644
--- a/arch/m68k/include/asm/mcf_pgalloc.h
+++ b/arch/m68k/include/asm/mcf_pgalloc.h
@@ -93,7 +93,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 {
 	pgd_t *new_pgd;
 
-	new_pgd = (pgd_t *)__get_free_page(GFP_DMA | __GFP_NOWARN);
+	new_pgd = get_free_page(GFP_DMA | __GFP_NOWARN);
 	if (!new_pgd)
 		return NULL;
 	memcpy(new_pgd, swapper_pg_dir, PAGE_SIZE);
diff --git a/arch/m68k/include/asm/motorola_pgalloc.h b/arch/m68k/include/asm/motorola_pgalloc.h
index 6e84224..60df054 100644
--- a/arch/m68k/include/asm/motorola_pgalloc.h
+++ b/arch/m68k/include/asm/motorola_pgalloc.h
@@ -11,7 +11,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long ad
 {
 	pte_t *pte;
 
-	pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
+	pte = get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
 	if (pte) {
 		__flush_page_to_ram(pte);
 		flush_tlb_kernel_page(pte);
diff --git a/arch/metag/include/asm/pgalloc.h b/arch/metag/include/asm/pgalloc.h
index cf9e2fb..ae19628 100644
--- a/arch/metag/include/asm/pgalloc.h
+++ b/arch/metag/include/asm/pgalloc.h
@@ -42,7 +42,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 					  unsigned long address)
 {
-	pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL | __GFP_REPEAT |
+	pte_t *pte = get_free_page(GFP_KERNEL | __GFP_REPEAT |
 					      __GFP_ZERO);
 	return pte;
 }
diff --git a/arch/microblaze/mm/pgtable.c b/arch/microblaze/mm/pgtable.c
index 4f4520e..76e117d 100644
--- a/arch/microblaze/mm/pgtable.c
+++ b/arch/microblaze/mm/pgtable.c
@@ -239,7 +239,7 @@ __init_refok pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 {
 	pte_t *pte;
 	if (mem_init_done) {
-		pte = (pte_t *)__get_free_page(GFP_KERNEL |
+		pte = get_free_page(GFP_KERNEL |
 					__GFP_REPEAT | __GFP_ZERO);
 	} else {
 		pte = (pte_t *)early_get_page();
diff --git a/arch/mn10300/mm/pgtable.c b/arch/mn10300/mm/pgtable.c
index e77a7c7..391992b 100644
--- a/arch/mn10300/mm/pgtable.c
+++ b/arch/mn10300/mm/pgtable.c
@@ -63,7 +63,7 @@ void set_pmd_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags)
 
 pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
 {
-	pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
+	pte_t *pte = get_free_page(GFP_KERNEL|__GFP_REPEAT);
 	if (pte)
 		clear_page(pte);
 	return pte;
diff --git a/arch/openrisc/include/asm/pgalloc.h b/arch/openrisc/include/asm/pgalloc.h
index 1f61391..642186f 100644
--- a/arch/openrisc/include/asm/pgalloc.h
+++ b/arch/openrisc/include/asm/pgalloc.h
@@ -43,7 +43,7 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
  */
 static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 {
-	pgd_t *ret = (pgd_t *)__get_free_page(GFP_KERNEL);
+	pgd_t *ret = get_free_page(GFP_KERNEL);
 
 	if (ret) {
 		memset(ret, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
diff --git a/arch/openrisc/mm/ioremap.c b/arch/openrisc/mm/ioremap.c
index 62b08ef..801533f 100644
--- a/arch/openrisc/mm/ioremap.c
+++ b/arch/openrisc/mm/ioremap.c
@@ -122,7 +122,7 @@ pte_t __init_refok *pte_alloc_one_kernel(struct mm_struct *mm,
 	pte_t *pte;
 
 	if (likely(mem_init_done)) {
-		pte = (pte_t *) __get_free_page(GFP_KERNEL | __GFP_REPEAT);
+		pte = get_free_page(GFP_KERNEL | __GFP_REPEAT);
 	} else {
 		pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
 #if 0
diff --git a/arch/parisc/include/asm/pgalloc.h b/arch/parisc/include/asm/pgalloc.h
index 5c10934..94e5b41 100644
--- a/arch/parisc/include/asm/pgalloc.h
+++ b/arch/parisc/include/asm/pgalloc.h
@@ -135,7 +135,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long address)
 static inline pte_t *
 pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
 {
-	pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
+	pte_t *pte = get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
 	return pte;
 }
 
diff --git a/arch/powerpc/include/asm/pgalloc-64.h b/arch/powerpc/include/asm/pgalloc-64.h
index c26021b..e61b0d2 100644
--- a/arch/powerpc/include/asm/pgalloc-64.h
+++ b/arch/powerpc/include/asm/pgalloc-64.h
@@ -79,7 +79,7 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
 static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 					  unsigned long address)
 {
-	return (pte_t *)__get_free_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO);
+	return get_free_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO);
 }
 
 static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
diff --git a/arch/powerpc/kvm/e500.c b/arch/powerpc/kvm/e500.c
index 29803fb..a525971 100644
--- a/arch/powerpc/kvm/e500.c
+++ b/arch/powerpc/kvm/e500.c
@@ -462,7 +462,7 @@ static struct kvm_vcpu *kvmppc_core_vcpu_create_e500(struct kvm *kvm,
 	if (err)
 		goto uninit_id;
 
-	vcpu->arch.shared = (void*)__get_free_page(GFP_KERNEL|__GFP_ZERO);
+	vcpu->arch.shared = get_free_page(GFP_KERNEL|__GFP_ZERO);
 	if (!vcpu->arch.shared)
 		goto uninit_tlb;
 
diff --git a/arch/powerpc/kvm/e500mc.c b/arch/powerpc/kvm/e500mc.c
index e002a71..450eab9 100644
--- a/arch/powerpc/kvm/e500mc.c
+++ b/arch/powerpc/kvm/e500mc.c
@@ -330,7 +330,7 @@ static struct kvm_vcpu *kvmppc_core_vcpu_create_e500mc(struct kvm *kvm,
 	if (err)
 		goto uninit_vcpu;
 
-	vcpu->arch.shared = (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
+	vcpu->arch.shared = get_free_page(GFP_KERNEL | __GFP_ZERO);
 	if (!vcpu->arch.shared)
 		goto uninit_tlb;
 
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index a466b84..a94f92b6 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -497,7 +497,7 @@ static void hugepd_free(struct mmu_gather *tlb, void *hugepte)
 	}
 
 	if (*batchp == NULL) {
-		*batchp = (struct hugepd_freelist *)__get_free_page(GFP_ATOMIC);
+		*batchp = get_free_page(GFP_ATOMIC);
 		(*batchp)->index = 0;
 	}
 
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
index 6e6c311..542f425 100644
--- a/arch/powerpc/mm/pgtable_32.c
+++ b/arch/powerpc/mm/pgtable_32.c
@@ -109,7 +109,7 @@ __init_refok pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long add
 	pte_t *pte;
 
 	if (slab_is_available()) {
-		pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
+		pte = get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
 	} else {
 		pte = __va(memblock_alloc(PAGE_SIZE, PAGE_SIZE));
 		if (pte)
diff --git a/arch/powerpc/platforms/pseries/cmm.c b/arch/powerpc/platforms/pseries/cmm.c
index db1dbe6..f4aa67d 100644
--- a/arch/powerpc/platforms/pseries/cmm.c
+++ b/arch/powerpc/platforms/pseries/cmm.c
@@ -145,8 +145,7 @@ static long cmm_alloc_pages(long nr)
 		if (!pa || pa->index >= CMM_NR_PAGES) {
 			/* Need a new page for the page list. */
 			spin_unlock(&cmm_lock);
-			npa = (struct cmm_page_array *)__get_free_page(
-					GFP_NOIO | __GFP_NOWARN |
+			npa = get_free_page(GFP_NOIO | __GFP_NOWARN |
 					__GFP_NORETRY | __GFP_NOMEMALLOC);
 			if (!npa) {
 				pr_info("%s: Can not allocate new page list\n", __func__);
@@ -566,8 +565,7 @@ static int cmm_mem_going_offline(void *arg)
 	while (pa_curr) {
 		if (((unsigned long)pa_curr >= start_page) &&
 				((unsigned long)pa_curr < end_page)) {
-			npa = (struct cmm_page_array *)__get_free_page(
-					GFP_NOIO | __GFP_NOWARN |
+			npa = get_free_page(GFP_NOIO | __GFP_NOWARN |
 					__GFP_NORETRY | __GFP_NOMEMALLOC);
 			if (!npa) {
 				spin_unlock(&cmm_lock);
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
index bd98ce2..f471734 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -275,7 +275,7 @@ static int tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum,
 	 * from iommu_alloc{,_sg}()
 	 */
 	if (!tcep) {
-		tcep = (__be64 *)__get_free_page(GFP_ATOMIC);
+		tcep = get_free_page(GFP_ATOMIC);
 		/* If allocation fails, fall back to the loop implementation */
 		if (!tcep) {
 			local_irq_restore(flags);
@@ -474,7 +474,7 @@ static int tce_setrange_multi_pSeriesLP(unsigned long start_pfn,
 	tcep = __this_cpu_read(tce_page);
 
 	if (!tcep) {
-		tcep = (__be64 *)__get_free_page(GFP_ATOMIC);
+		tcep = get_free_page(GFP_ATOMIC);
 		if (!tcep) {
 			local_irq_enable();
 			return -ENOMEM;
diff --git a/arch/s390/crypto/aes_s390.c b/arch/s390/crypto/aes_s390.c
index 4b610d6..15edffb 100644
--- a/arch/s390/crypto/aes_s390.c
+++ b/arch/s390/crypto/aes_s390.c
@@ -936,7 +936,7 @@ static int __init aes_s390_init(void)
 				CRYPT_S390_MSA | CRYPT_S390_MSA4) &&
 	    crypt_s390_func_available(KMCTR_AES_256_ENCRYPT,
 				CRYPT_S390_MSA | CRYPT_S390_MSA4)) {
-		ctrblk = (u8 *) __get_free_page(GFP_KERNEL);
+		ctrblk = get_free_page(GFP_KERNEL);
 		if (!ctrblk) {
 			ret = -ENOMEM;
 			goto ctr_aes_err;
diff --git a/arch/s390/crypto/des_s390.c b/arch/s390/crypto/des_s390.c
index 9f402dc..6f7288b 100644
--- a/arch/s390/crypto/des_s390.c
+++ b/arch/s390/crypto/des_s390.c
@@ -573,7 +573,7 @@ static int __init des_s390_init(void)
 		ret = crypto_register_alg(&ctr_des3_alg);
 		if (ret)
 			goto ctr_des3_err;
-		ctrblk = (u8 *) __get_free_page(GFP_KERNEL);
+		ctrblk = get_free_page(GFP_KERNEL);
 		if (!ctrblk) {
 			ret = -ENOMEM;
 			goto ctr_mem_err;
diff --git a/arch/s390/crypto/prng.c b/arch/s390/crypto/prng.c
index d3835d2..2971c2c 100644
--- a/arch/s390/crypto/prng.c
+++ b/arch/s390/crypto/prng.c
@@ -116,7 +116,7 @@ static int generate_entropy(u8 *ebuf, size_t nbytes)
 	int n, ret = 0;
 	u8 *pg, *h, hash[32];
 
-	pg = (u8 *) __get_free_page(GFP_KERNEL);
+	pg = get_free_page(GFP_KERNEL);
 	if (!pg) {
 		prng_errorflag = PRNG_GEN_ENTROPY_FAILED;
 		return -ENOMEM;
diff --git a/arch/s390/kernel/kprobes.c b/arch/s390/kernel/kprobes.c
index 2021dc0..8e2c032 100644
--- a/arch/s390/kernel/kprobes.c
+++ b/arch/s390/kernel/kprobes.c
@@ -43,7 +43,7 @@ DEFINE_INSN_CACHE_OPS(dmainsn);
 
 static void *alloc_dmainsn_page(void)
 {
-	return (void *)__get_free_page(GFP_KERNEL | GFP_DMA);
+	return get_free_page(GFP_KERNEL | GFP_DMA);
 }
 
 static void free_dmainsn_page(void *page)
diff --git a/arch/s390/kernel/topology.c b/arch/s390/kernel/topology.c
index 40b8102..b7994b5 100644
--- a/arch/s390/kernel/topology.c
+++ b/arch/s390/kernel/topology.c
@@ -481,7 +481,7 @@ static int __init s390_topology_init(void)
 
 	if (!MACHINE_HAS_TOPOLOGY)
 		return 0;
-	tl_info = (struct sysinfo_15_1_x *)__get_free_page(GFP_KERNEL);
+	tl_info = get_free_page(GFP_KERNEL);
 	info = tl_info;
 	store_topology(info);
 	pr_info("The CPU configuration topology of the machine is:");
diff --git a/arch/s390/mm/cmm.c b/arch/s390/mm/cmm.c
index e5879ba..4236961 100644
--- a/arch/s390/mm/cmm.c
+++ b/arch/s390/mm/cmm.c
@@ -67,7 +67,7 @@ static long cmm_alloc_pages(long nr, long *counter,
 	void *addr;
 
 	while (nr) {
-		addr = (void *)__get_free_page(GFP_NOIO);
+		addr = get_free_page(GFP_NOIO);
 		if (!addr)
 			break;
 		spin_lock(&cmm_lock);
@@ -75,8 +75,7 @@ static long cmm_alloc_pages(long nr, long *counter,
 		if (!pa || pa->index >= CMM_NR_PAGES) {
 			/* Need a new page for the page list. */
 			spin_unlock(&cmm_lock);
-			npa = (struct cmm_page_array *)
-				__get_free_page(GFP_NOIO);
+			npa = get_free_page(GFP_NOIO);
 			if (!npa) {
 				free_page(addr);
 				break;
diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c
index e20811c..93241b9 100644
--- a/arch/s390/mm/maccess.c
+++ b/arch/s390/mm/maccess.c
@@ -137,7 +137,7 @@ int copy_to_user_real(void __user *dest, void *src, unsigned long count)
 	int offs = 0, size, rc;
 	char *buf;
 
-	buf = (char *) __get_free_page(GFP_KERNEL);
+	buf = get_free_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 	rc = -EFAULT;
@@ -189,7 +189,7 @@ void *xlate_dev_mem_ptr(phys_addr_t addr)
 	preempt_disable();
 	if (is_swapped(addr)) {
 		size = PAGE_SIZE - (addr & ~PAGE_MASK);
-		bounce = (void *) __get_free_page(GFP_ATOMIC);
+		bounce = get_free_page(GFP_ATOMIC);
 		if (bounce)
 			memcpy_absolute(bounce, (void *) addr, size);
 	}
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c
index df429c6..5078169 100644
--- a/arch/s390/mm/pgtable.c
+++ b/arch/s390/mm/pgtable.c
@@ -1113,8 +1113,7 @@ void tlb_remove_table(struct mmu_gather *tlb, void *table)
 
 	tlb->mm->context.flush_mm = 1;
 	if (*batch == NULL) {
-		*batch = (struct mmu_table_batch *)
-			__get_free_page(GFP_NOWAIT | __GFP_NOWARN);
+		*batch = get_free_page(GFP_NOWAIT | __GFP_NOWARN);
 		if (*batch == NULL) {
 			__tlb_flush_mm_lazy(tlb->mm);
 			tlb_remove_table_one(table);
diff --git a/arch/tile/mm/elf.c b/arch/tile/mm/elf.c
index cbc81ab..a8a58cd 100644
--- a/arch/tile/mm/elf.c
+++ b/arch/tile/mm/elf.c
@@ -48,7 +48,7 @@ static int notify_exec(struct mm_struct *mm)
 	if (!sim_is_simulator())
 		return 1;
 
-	buf = (char *) __get_free_page(GFP_KERNEL);
+	buf = get_free_page(GFP_KERNEL);
 	if (buf == NULL)
 		return 0;
 
diff --git a/arch/um/kernel/mem.c b/arch/um/kernel/mem.c
index 8936388..5bbd2eb 100644
--- a/arch/um/kernel/mem.c
+++ b/arch/um/kernel/mem.c
@@ -184,7 +184,7 @@ void free_initrd_mem(unsigned long start, unsigned long end)
 
 pgd_t *pgd_alloc(struct mm_struct *mm)
 {
-	pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL);
+	pgd_t *pgd = get_free_page(GFP_KERNEL);
 
 	if (pgd) {
 		memset(pgd, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
@@ -204,7 +204,7 @@ pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
 {
 	pte_t *pte;
 
-	pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
+	pte = get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
 	return pte;
 }
 
@@ -225,7 +225,7 @@ pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address)
 #ifdef CONFIG_3_LEVEL_PGTABLES
 pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
 {
-	pmd_t *pmd = (pmd_t *) __get_free_page(GFP_KERNEL);
+	pmd_t *pmd = get_free_page(GFP_KERNEL);
 
 	if (pmd)
 		memset(pmd, 0, PAGE_SIZE);
diff --git a/arch/unicore32/include/asm/pgalloc.h b/arch/unicore32/include/asm/pgalloc.h
index 3287878..3b03876 100644
--- a/arch/unicore32/include/asm/pgalloc.h
+++ b/arch/unicore32/include/asm/pgalloc.h
@@ -38,7 +38,7 @@ pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
 {
 	pte_t *pte;
 
-	pte = (pte_t *)__get_free_page(PGALLOC_GFP);
+	pte = get_free_page(PGALLOC_GFP);
 	if (pte)
 		clean_dcache_area(pte, PTRS_PER_PTE * sizeof(pte_t));
 
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index fb86efb..c3f7453 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -692,7 +692,7 @@ static int mmu_topup_memory_cache_page(struct kvm_mmu_memory_cache *cache,
 	if (cache->nobjs >= min)
 		return 0;
 	while (cache->nobjs < ARRAY_SIZE(cache->objects)) {
-		page = (void *)__get_free_page(GFP_KERNEL);
+		page = get_free_page(GFP_KERNEL);
 		if (!page)
 			return -ENOMEM;
 		cache->objects[cache->nobjs++] = page;
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 7206fee..fe36bf2 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -6088,44 +6088,41 @@ static __init int hardware_setup(void)
 	for (i = 0; i < ARRAY_SIZE(vmx_msr_index); ++i)
 		kvm_define_shared_msr(i, vmx_msr_index[i]);
 
-	vmx_io_bitmap_a = (unsigned long *)__get_free_page(GFP_KERNEL);
+	vmx_io_bitmap_a = get_free_page(GFP_KERNEL);
 	if (!vmx_io_bitmap_a)
 		return r;
 
-	vmx_io_bitmap_b = (unsigned long *)__get_free_page(GFP_KERNEL);
+	vmx_io_bitmap_b = get_free_page(GFP_KERNEL);
 	if (!vmx_io_bitmap_b)
 		goto out;
 
-	vmx_msr_bitmap_legacy = (unsigned long *)__get_free_page(GFP_KERNEL);
+	vmx_msr_bitmap_legacy = get_free_page(GFP_KERNEL);
 	if (!vmx_msr_bitmap_legacy)
 		goto out1;
 
-	vmx_msr_bitmap_legacy_x2apic =
-				(unsigned long *)__get_free_page(GFP_KERNEL);
+	vmx_msr_bitmap_legacy_x2apic = get_free_page(GFP_KERNEL);
 	if (!vmx_msr_bitmap_legacy_x2apic)
 		goto out2;
 
-	vmx_msr_bitmap_longmode = (unsigned long *)__get_free_page(GFP_KERNEL);
+	vmx_msr_bitmap_longmode = get_free_page(GFP_KERNEL);
 	if (!vmx_msr_bitmap_longmode)
 		goto out3;
 
-	vmx_msr_bitmap_longmode_x2apic =
-				(unsigned long *)__get_free_page(GFP_KERNEL);
+	vmx_msr_bitmap_longmode_x2apic = get_free_page(GFP_KERNEL);
 	if (!vmx_msr_bitmap_longmode_x2apic)
 		goto out4;
 
 	if (nested) {
-		vmx_msr_bitmap_nested =
-			(unsigned long *)__get_free_page(GFP_KERNEL);
+		vmx_msr_bitmap_nested = get_free_page(GFP_KERNEL);
 		if (!vmx_msr_bitmap_nested)
 			goto out5;
 	}
 
-	vmx_vmread_bitmap = (unsigned long *)__get_free_page(GFP_KERNEL);
+	vmx_vmread_bitmap = get_free_page(GFP_KERNEL);
 	if (!vmx_vmread_bitmap)
 		goto out6;
 
-	vmx_vmwrite_bitmap = (unsigned long *)__get_free_page(GFP_KERNEL);
+	vmx_vmwrite_bitmap = get_free_page(GFP_KERNEL);
 	if (!vmx_vmwrite_bitmap)
 		goto out7;
 
diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
index 8e51a6c..d9781f0 100644
--- a/arch/x86/mm/pgtable.c
+++ b/arch/x86/mm/pgtable.c
@@ -18,7 +18,7 @@ gfp_t __userpte_alloc_gfp = PGALLOC_GFP | PGALLOC_USER_GFP;
 
 pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
 {
-	return (pte_t *)__get_free_page(PGALLOC_GFP);
+	return get_free_page(PGALLOC_GFP);
 }
 
 pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address)
@@ -209,7 +209,7 @@ static int preallocate_pmds(struct mm_struct *mm, pmd_t *pmds[])
 	bool failed = false;
 
 	for(i = 0; i < PREALLOCATED_PMDS; i++) {
-		pmd_t *pmd = (pmd_t *)__get_free_page(PGALLOC_GFP);
+		pmd_t *pmd = get_free_page(PGALLOC_GFP);
 		if (!pmd)
 			failed = true;
 		if (pmd && !pgtable_pmd_page_ctor(virt_to_page(pmd))) {
@@ -323,7 +323,7 @@ static inline pgd_t *_pgd_alloc(void)
 	 * We allocate one page for pgd.
 	 */
 	if (!SHARED_KERNEL_PMD)
-		return (pgd_t *)__get_free_page(PGALLOC_GFP);
+		return get_free_page(PGALLOC_GFP);
 
 	/*
 	 * Now PAE kernel is not running as a Xen domain. We can allocate
@@ -342,7 +342,7 @@ static inline void _pgd_free(pgd_t *pgd)
 #else
 static inline pgd_t *_pgd_alloc(void)
 {
-	return (pgd_t *)__get_free_page(PGALLOC_GFP);
+	return get_free_page(PGALLOC_GFP);
 }
 
 static inline void _pgd_free(pgd_t *pgd)
diff --git a/arch/x86/pci/pcbios.c b/arch/x86/pci/pcbios.c
index 674ecff..f5a9458 100644
--- a/arch/x86/pci/pcbios.c
+++ b/arch/x86/pci/pcbios.c
@@ -385,7 +385,7 @@ struct irq_routing_table * pcibios_get_irq_routing_table(void)
 
 	if (!pci_bios_present)
 		return NULL;
-	page = (void *)__get_free_page(GFP_KERNEL);
+	page = get_free_page(GFP_KERNEL);
 	if (!page)
 		return NULL;
 	opt.table = page;
diff --git a/arch/x86/um/ldt.c b/arch/x86/um/ldt.c
index 5264f55..60b4314 100644
--- a/arch/x86/um/ldt.c
+++ b/arch/x86/um/ldt.c
@@ -157,8 +157,7 @@ static int write_ldt(void __user * ptr, unsigned long bytecount, int func)
 			if (i == 0)
 				memcpy(&entry0, ldt->u.entries,
 				       sizeof(entry0));
-			ldt->u.pages[i] = (struct ldt_entry *)
-				__get_free_page(GFP_KERNEL|__GFP_ZERO);
+			ldt->u.pages[i] = get_free_page(GFP_KERNEL|__GFP_ZERO);
 			if (!ldt->u.pages[i]) {
 				err = -ENOMEM;
 				/* Undo the change in host */
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index bb7b2e5..d06a96d 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1523,7 +1523,7 @@ static int xen_pgd_alloc(struct mm_struct *mm)
 
 		ret = -ENOMEM;
 
-		user_pgd = (pgd_t *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
+		user_pgd = get_free_page(GFP_KERNEL | __GFP_ZERO);
 		page->private = (unsigned long)user_pgd;
 
 		if (user_pgd != NULL) {
diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
index b72eab3..b2505a6 100644
--- a/arch/x86/xen/p2m.c
+++ b/arch/x86/xen/p2m.c
@@ -182,7 +182,7 @@ static void * __ref alloc_p2m_page(void)
 	if (unlikely(!slab_is_available()))
 		return alloc_bootmem_align(PAGE_SIZE, PAGE_SIZE);
 
-	return (void *)__get_free_page(GFP_KERNEL | __GFP_REPEAT);
+	return get_free_page(GFP_KERNEL | __GFP_REPEAT);
 }
 
 static void __ref free_p2m_page(void *p)
diff --git a/arch/xtensa/include/asm/pgalloc.h b/arch/xtensa/include/asm/pgalloc.h
index 2a7631f..65657a6 100644
--- a/arch/xtensa/include/asm/pgalloc.h
+++ b/arch/xtensa/include/asm/pgalloc.h
@@ -44,7 +44,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 	pte_t *ptep;
 	int i;
 
-	ptep = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
+	ptep = get_free_page(GFP_KERNEL|__GFP_REPEAT);
 	if (!ptep)
 		return NULL;
 	for (i = 0; i < 1024; i++)
diff --git a/block/partitions/check.c b/block/partitions/check.c
index dc43d02b..6e69263 100644
--- a/block/partitions/check.c
+++ b/block/partitions/check.c
@@ -147,7 +147,7 @@ check_partition(struct gendisk *hd, struct block_device *bdev)
 	state = allocate_partitions(hd);
 	if (!state)
 		return NULL;
-	state->pp_buf = (char *)__get_free_page(GFP_KERNEL);
+	state->pp_buf = get_free_page(GFP_KERNEL);
 	if (!state->pp_buf) {
 		free_partitions(state);
 		return NULL;
diff --git a/crypto/blkcipher.c b/crypto/blkcipher.c
index d46ebfa..97274e7 100644
--- a/crypto/blkcipher.c
+++ b/crypto/blkcipher.c
@@ -240,7 +240,7 @@ static int blkcipher_walk_next(struct blkcipher_desc *desc,
 	    !scatterwalk_aligned(&walk->out, walk->alignmask)) {
 		walk->flags |= BLKCIPHER_WALK_COPY;
 		if (!walk->page) {
-			walk->page = (void *)__get_free_page(GFP_ATOMIC);
+			walk->page = get_free_page(GFP_ATOMIC);
 			if (!walk->page)
 				n = 0;
 		}
diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c
index 5cc0a85..df693aa 100644
--- a/crypto/tcrypt.c
+++ b/crypto/tcrypt.c
@@ -255,7 +255,7 @@ static int testmgr_alloc_buf(char *buf[XBUFSIZE])
 	int i;
 
 	for (i = 0; i < XBUFSIZE; i++) {
-		buf[i] = (void *)__get_free_page(GFP_KERNEL);
+		buf[i] = get_free_page(GFP_KERNEL);
 		if (!buf[i])
 			goto err_free_buf;
 	}
@@ -2204,7 +2204,7 @@ static int __init tcrypt_mod_init(void)
 	int i;
 
 	for (i = 0; i < TVMEMSIZE; i++) {
-		tvmem[i] = (void *)__get_free_page(GFP_KERNEL);
+		tvmem[i] = get_free_page(GFP_KERNEL);
 		if (!tvmem[i])
 			goto err_free_tv;
 	}
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index dc8d8f7..47dd4b8 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -166,7 +166,7 @@ static int testmgr_alloc_buf(char *buf[XBUFSIZE])
 	int i;
 
 	for (i = 0; i < XBUFSIZE; i++) {
-		buf[i] = (void *)__get_free_page(GFP_KERNEL);
+		buf[i] = get_free_page(GFP_KERNEL);
 		if (!buf[i])
 			goto err_free_buf;
 	}
diff --git a/drivers/acpi/nvs.c b/drivers/acpi/nvs.c
index 36bf798..c07363c 100644
--- a/drivers/acpi/nvs.c
+++ b/drivers/acpi/nvs.c
@@ -155,7 +155,7 @@ int suspend_nvs_alloc(void)
 	struct nvs_page *entry;
 
 	list_for_each_entry(entry, &nvs_list, node) {
-		entry->data = (void *)__get_free_page(GFP_KERNEL);
+		entry->data = get_free_page(GFP_KERNEL);
 		if (!entry->data) {
 			suspend_nvs_free();
 			return -ENOMEM;
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index a055899..9e0889f 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -514,7 +514,7 @@ cciss_proc_write(struct file *file, const char __user *buf,
 	if (!buf || length > PAGE_SIZE - 1)
 		return -EINVAL;
 
-	buffer = (char *)__get_free_page(GFP_KERNEL);
+	buffer = get_free_page(GFP_KERNEL);
 	if (!buffer)
 		return -ENOMEM;
 
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index c5f9c21..06ca3ef 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -2487,10 +2487,10 @@ found:
 
 static int drbd_alloc_socket(struct drbd_socket *socket)
 {
-	socket->rbuf = (void *) __get_free_page(GFP_KERNEL);
+	socket->rbuf = get_free_page(GFP_KERNEL);
 	if (!socket->rbuf)
 		return -ENOMEM;
-	socket->sbuf = (void *) __get_free_page(GFP_KERNEL);
+	socket->sbuf = get_free_page(GFP_KERNEL);
 	if (!socket->sbuf)
 		return -ENOMEM;
 	return 0;
diff --git a/drivers/char/agp/amd-k7-agp.c b/drivers/char/agp/amd-k7-agp.c
index 3835c1b..505be8d 100644
--- a/drivers/char/agp/amd-k7-agp.c
+++ b/drivers/char/agp/amd-k7-agp.c
@@ -37,7 +37,7 @@ static int amd_create_page_map(struct amd_page_map *page_map)
 {
 	int i;
 
-	page_map->real = (unsigned long *) __get_free_page(GFP_KERNEL);
+	page_map->real = get_free_page(GFP_KERNEL);
 	if (page_map->real == NULL)
 		return -ENOMEM;
 
diff --git a/drivers/char/agp/ati-agp.c b/drivers/char/agp/ati-agp.c
index 95651e2..758e7c6 100644
--- a/drivers/char/agp/ati-agp.c
+++ b/drivers/char/agp/ati-agp.c
@@ -56,7 +56,7 @@ static int ati_create_page_map(struct ati_page_map *page_map)
 {
 	int i, err = 0;
 
-	page_map->real = (unsigned long *) __get_free_page(GFP_KERNEL);
+	page_map->real = get_free_page(GFP_KERNEL);
 	if (page_map->real == NULL)
 		return -ENOMEM;
 
diff --git a/drivers/char/agp/sworks-agp.c b/drivers/char/agp/sworks-agp.c
index 96d2e55..b590985 100644
--- a/drivers/char/agp/sworks-agp.c
+++ b/drivers/char/agp/sworks-agp.c
@@ -48,7 +48,7 @@ static int serverworks_create_page_map(struct serverworks_page_map *page_map)
 {
 	int i;
 
-	page_map->real = (unsigned long *) __get_free_page(GFP_KERNEL);
+	page_map->real = get_free_page(GFP_KERNEL);
 	if (page_map->real == NULL) {
 		return -ENOMEM;
 	}
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
index 63f7056..2a6ce6b 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -424,7 +424,7 @@ static ssize_t read_kmem(struct file *file, char __user *buf,
 	}
 
 	if (count > 0) {
-		kbuf = (char *)__get_free_page(GFP_KERNEL);
+		kbuf = get_free_page(GFP_KERNEL);
 		if (!kbuf)
 			return -ENOMEM;
 		while (count > 0) {
@@ -524,7 +524,7 @@ static ssize_t write_kmem(struct file *file, const char __user *buf,
 	}
 
 	if (count > 0) {
-		kbuf = (char *)__get_free_page(GFP_KERNEL);
+		kbuf = get_free_page(GFP_KERNEL);
 		if (!kbuf)
 			return wrote ? wrote : -ENOMEM;
 		while (count > 0) {
diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c
index 2ccd0c9..abd4162 100644
--- a/drivers/char/tpm/xen-tpmfront.c
+++ b/drivers/char/tpm/xen-tpmfront.c
@@ -195,7 +195,7 @@ static int setup_ring(struct xenbus_device *dev, struct tpm_private *priv)
 	int rv;
 	grant_ref_t gref;
 
-	priv->shr = (void *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
+	priv->shr = get_free_page(GFP_KERNEL|__GFP_ZERO);
 	if (!priv->shr) {
 		xenbus_dev_fatal(dev, -ENOMEM, "allocating shared ring");
 		return -ENOMEM;
diff --git a/drivers/char/xilinx_hwicap/xilinx_hwicap.c b/drivers/char/xilinx_hwicap/xilinx_hwicap.c
index 7b09193..7175120a 100644
--- a/drivers/char/xilinx_hwicap/xilinx_hwicap.c
+++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.c
@@ -456,7 +456,7 @@ hwicap_write(struct file *file, const char __user *buf,
 		goto error;
 	}
 
-	kbuf = (u32 *) __get_free_page(GFP_KERNEL);
+	kbuf = get_free_page(GFP_KERNEL);
 	if (!kbuf) {
 		status = -ENOMEM;
 		goto error;
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index f7303dd..bf433b7 100644
--- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -2999,7 +2999,7 @@ static struct fw_iso_context *ohci_allocate_iso_context(struct fw_card *card,
 
 	memset(ctx, 0, sizeof(*ctx));
 	ctx->header_length = 0;
-	ctx->header = (void *) __get_free_page(GFP_KERNEL);
+	ctx->header = get_free_page(GFP_KERNEL);
 	if (ctx->header == NULL) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/gpu/drm/via/via_dmablit.c b/drivers/gpu/drm/via/via_dmablit.c
index 869282d..5fa7c6d 100644
--- a/drivers/gpu/drm/via/via_dmablit.c
+++ b/drivers/gpu/drm/via/via_dmablit.c
@@ -277,8 +277,7 @@ via_alloc_desc_pages(drm_via_sg_info_t *vsg)
 
 	vsg->state = dr_via_desc_pages_alloc;
 	for (i = 0; i < vsg->num_desc_pages; ++i) {
-		if (NULL == (vsg->desc_pages[i] =
-			     (drm_via_descriptor_t *) __get_free_page(GFP_KERNEL)))
+		if (NULL == (vsg->desc_pages[i] = get_free_page(GFP_KERNEL)))
 			return -ENOMEM;
 	}
 	DRM_DEBUG("Allocated %d pages for %d descriptors.\n", vsg->num_desc_pages,
diff --git a/drivers/ide/ide-proc.c b/drivers/ide/ide-proc.c
index 0002937..cbb2ba2 100644
--- a/drivers/ide/ide-proc.c
+++ b/drivers/ide/ide-proc.c
@@ -349,7 +349,7 @@ static ssize_t ide_settings_proc_write(struct file *file, const char __user *buf
 	if (count >= PAGE_SIZE)
 		return -EINVAL;
 
-	s = buf = (char *)__get_free_page(GFP_USER);
+	s = buf = get_free_page(GFP_USER);
 	if (!buf)
 		return -ENOMEM;
 
diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
index a81e139..61b9417 100644
--- a/drivers/infiniband/core/umem.c
+++ b/drivers/infiniband/core/umem.c
@@ -147,7 +147,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
 	/* We assume the memory is from hugetlb until proved otherwise */
 	umem->hugetlb   = 1;
 
-	page_list = (struct page **) __get_free_page(GFP_KERNEL);
+	page_list = get_free_page(GFP_KERNEL);
 	if (!page_list) {
 		kfree(umem);
 		return ERR_PTR(-ENOMEM);
@@ -157,7 +157,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
 	 * if we can't alloc the vma_list, it's not so bad;
 	 * just assume the memory is not hugetlb memory
 	 */
-	vma_list = (struct vm_area_struct **) __get_free_page(GFP_KERNEL);
+	vma_list = get_free_page(GFP_KERNEL);
 	if (!vma_list)
 		umem->hugetlb = 0;
 
diff --git a/drivers/infiniband/core/umem_odp.c b/drivers/infiniband/core/umem_odp.c
index 8b14a3f..c0f950ad 100644
--- a/drivers/infiniband/core/umem_odp.c
+++ b/drivers/infiniband/core/umem_odp.c
@@ -535,7 +535,7 @@ int ib_umem_odp_map_dma_pages(struct ib_umem *umem, u64 user_virt, u64 bcnt,
 	    user_virt + bcnt > ib_umem_end(umem))
 		return -EFAULT;
 
-	local_page_list = (struct page **)__get_free_page(GFP_KERNEL);
+	local_page_list = get_free_page(GFP_KERNEL);
 	if (!local_page_list)
 		return -ENOMEM;
 
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c
index a80b709..db0b414 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
@@ -660,7 +660,7 @@ static struct ib_mr *iwch_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
 	if (err)
 		goto err;
 
-	pages = (__be64 *) __get_free_page(GFP_KERNEL);
+	pages = get_free_page(GFP_KERNEL);
 	if (!pages) {
 		err = -ENOMEM;
 		goto err_pbl;
diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c
index 870ac06..f519bc1 100644
--- a/drivers/infiniband/hw/cxgb4/device.c
+++ b/drivers/infiniband/hw/cxgb4/device.c
@@ -848,8 +848,7 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev)
 		printk(KERN_ERR MOD "error %d initializing ocqp pool\n", err);
 		goto err4;
 	}
-	rdev->status_page = (struct t4_dev_status_page *)
-			    __get_free_page(GFP_KERNEL);
+	rdev->status_page = get_free_page(GFP_KERNEL);
 	if (!rdev->status_page) {
 		pr_err(MOD "error allocating status page\n");
 		goto err4;
diff --git a/drivers/infiniband/hw/cxgb4/mem.c b/drivers/infiniband/hw/cxgb4/mem.c
index 9720caa..eb6d82d 100644
--- a/drivers/infiniband/hw/cxgb4/mem.c
+++ b/drivers/infiniband/hw/cxgb4/mem.c
@@ -743,7 +743,7 @@ struct ib_mr *c4iw_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
 	if (err)
 		goto err;
 
-	pages = (__be64 *) __get_free_page(GFP_KERNEL);
+	pages = get_free_page(GFP_KERNEL);
 	if (!pages) {
 		err = -ENOMEM;
 		goto err_pbl;
diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c
index 227c99bb..c942b00 100644
--- a/drivers/infiniband/hw/mlx4/mr.c
+++ b/drivers/infiniband/hw/mlx4/mr.c
@@ -96,7 +96,7 @@ int mlx4_ib_umem_write_mtt(struct mlx4_ib_dev *dev, struct mlx4_mtt *mtt,
 	int err = 0;
 	struct scatterlist *sg;
 
-	pages = (u64 *) __get_free_page(GFP_KERNEL);
+	pages = get_free_page(GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;
 
diff --git a/drivers/infiniband/hw/mlx5/odp.c b/drivers/infiniband/hw/mlx5/odp.c
index 899add65..a378917 100644
--- a/drivers/infiniband/hw/mlx5/odp.c
+++ b/drivers/infiniband/hw/mlx5/odp.c
@@ -538,7 +538,7 @@ static void mlx5_ib_mr_wqe_pfault_handler(struct mlx5_ib_qp *qp,
 	u16 wqe_index = pfault->mpfault.wqe.wqe_index;
 	int requestor = pfault->mpfault.flags & MLX5_PFAULT_REQUESTOR;
 
-	buffer = (char *)__get_free_page(GFP_KERNEL);
+	buffer = get_free_page(GFP_KERNEL);
 	if (!buffer) {
 		mlx5_ib_err(dev, "Error allocating memory for IO page fault handling.\n");
 		resume_with_error = 1;
diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c
index e95980e..4ea565c 100644
--- a/drivers/infiniband/hw/mthca/mthca_provider.c
+++ b/drivers/infiniband/hw/mthca/mthca_provider.c
@@ -1026,7 +1026,7 @@ static struct ib_mr *mthca_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
 		goto err_umem;
 	}
 
-	pages = (u64 *) __get_free_page(GFP_KERNEL);
+	pages = get_free_page(GFP_KERNEL);
 	if (!pages) {
 		err = -ENOMEM;
 		goto err_mtt;
diff --git a/drivers/infiniband/hw/usnic/usnic_uiom.c b/drivers/infiniband/hw/usnic/usnic_uiom.c
index daaaf3d..ddadc5c 100644
--- a/drivers/infiniband/hw/usnic/usnic_uiom.c
+++ b/drivers/infiniband/hw/usnic/usnic_uiom.c
@@ -122,7 +122,7 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable,
 
 	INIT_LIST_HEAD(chunk_list);
 
-	page_list = (struct page **) __get_free_page(GFP_KERNEL);
+	page_list = get_free_page(GFP_KERNEL);
 	if (!page_list)
 		return -ENOMEM;
 
diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
index 93f3a5c..91be47a 100644
--- a/drivers/input/misc/xen-kbdfront.c
+++ b/drivers/input/misc/xen-kbdfront.c
@@ -123,7 +123,7 @@ static int xenkbd_probe(struct xenbus_device *dev,
 	info->gref = -1;
 	snprintf(info->phys, sizeof(info->phys), "xenbus/%s", dev->nodename);
 
-	info->page = (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
+	info->page = get_free_page(GFP_KERNEL | __GFP_ZERO);
 	if (!info->page)
 		goto error_nomem;
 
diff --git a/drivers/macintosh/rack-meter.c b/drivers/macintosh/rack-meter.c
index ff85b7b..971dc30 100644
--- a/drivers/macintosh/rack-meter.c
+++ b/drivers/macintosh/rack-meter.c
@@ -441,7 +441,7 @@ static int rackmeter_probe(struct macio_dev* mdev,
 	pr_debug("  dma @0x%08x\n", (unsigned int)rdma.start);
 	pr_debug("  irq %d\n", rm->irq);
 
-	rm->ubuf = (u8 *)__get_free_page(GFP_KERNEL);
+	rm->ubuf = get_free_page(GFP_KERNEL);
 	if (rm->ubuf == NULL) {
 		printk(KERN_ERR
 		       "rackmeter: failed to allocate samples page !\n");
diff --git a/drivers/media/pci/pt1/pt1.c b/drivers/media/pci/pt1/pt1.c
index ce4f862..b56fe66 100644
--- a/drivers/media/pci/pt1/pt1.c
+++ b/drivers/media/pci/pt1/pt1.c
@@ -651,7 +651,7 @@ pt1_alloc_adapter(struct pt1 *pt1)
 	adap->voltage = SEC_VOLTAGE_OFF;
 	adap->sleep = 1;
 
-	buf = (u8 *)__get_free_page(GFP_KERNEL);
+	buf = get_free_page(GFP_KERNEL);
 	if (!buf) {
 		ret = -ENOMEM;
 		goto err_kfree;
diff --git a/drivers/media/pci/ttpci/av7110_ca.c b/drivers/media/pci/ttpci/av7110_ca.c
index ed9c8380..c99e079 100644
--- a/drivers/media/pci/ttpci/av7110_ca.c
+++ b/drivers/media/pci/ttpci/av7110_ca.c
@@ -152,7 +152,7 @@ static ssize_t ci_ll_write(struct dvb_ringbuffer *cibuf, struct file *file,
 {
 	int free;
 	int non_blocking = file->f_flags & O_NONBLOCK;
-	u8 *page = (u8 *)__get_free_page(GFP_USER);
+	u8 *page = get_free_page(GFP_USER);
 	int res;
 
 	if (!page)
diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
index 2750bff..5cce770 100644
--- a/drivers/misc/cxl/pci.c
+++ b/drivers/misc/cxl/pci.c
@@ -790,7 +790,7 @@ ssize_t cxl_afu_read_err_buffer(struct cxl_afu *afu, char *buf,
 	}
 
 	/* use bounce buffer for copy */
-	tbuf = (void *)__get_free_page(GFP_TEMPORARY);
+	tbuf = get_free_page(GFP_TEMPORARY);
 	if (!tbuf)
 		return -ENOMEM;
 
diff --git a/drivers/misc/ibmasm/ibmasmfs.c b/drivers/misc/ibmasm/ibmasmfs.c
index 6694cca..b5385b0 100644
--- a/drivers/misc/ibmasm/ibmasmfs.c
+++ b/drivers/misc/ibmasm/ibmasmfs.c
@@ -519,7 +519,7 @@ static ssize_t remote_settings_file_read(struct file *file, char __user *buf, si
 	if (*offset != 0)
 		return 0;
 
-	page = (unsigned char *)__get_free_page(GFP_KERNEL);
+	page = get_free_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
diff --git a/drivers/misc/lkdtm.c b/drivers/misc/lkdtm.c
index 0446145..98a1108 100644
--- a/drivers/misc/lkdtm.c
+++ b/drivers/misc/lkdtm.c
@@ -627,7 +627,7 @@ static ssize_t do_register_entry(enum cname which, struct file *f,
 	if (count >= PAGE_SIZE)
 		return -EINVAL;
 
-	buf = (char *)__get_free_page(GFP_KERNEL);
+	buf = get_free_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 	if (copy_from_user(buf, user_buf, count)) {
@@ -660,7 +660,7 @@ static ssize_t lkdtm_debugfs_read(struct file *f, char __user *user_buf,
 	char *buf;
 	int i, n, out;
 
-	buf = (char *)__get_free_page(GFP_KERNEL);
+	buf = get_free_page(GFP_KERNEL);
 	if (buf == NULL)
 		return -ENOMEM;
 
@@ -742,7 +742,7 @@ static ssize_t direct_entry(struct file *f, const char __user *user_buf,
 	if (count < 1)
 		return -EINVAL;
 
-	buf = (char *)__get_free_page(GFP_KERNEL);
+	buf = get_free_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 	if (copy_from_user(buf, user_buf, count)) {
diff --git a/drivers/mmc/host/tmio_mmc_dma.c b/drivers/mmc/host/tmio_mmc_dma.c
index be9c8d7..08a1ad0 100644
--- a/drivers/mmc/host/tmio_mmc_dma.c
+++ b/drivers/mmc/host/tmio_mmc_dma.c
@@ -315,7 +315,7 @@ void tmio_mmc_request_dma(struct tmio_mmc_host *host, struct tmio_mmc_data *pdat
 		if (ret < 0)
 			goto ecfgrx;
 
-		host->bounce_buf = (u8 *)__get_free_page(GFP_KERNEL | GFP_DMA);
+		host->bounce_buf = get_free_page(GFP_KERNEL | GFP_DMA);
 		if (!host->bounce_buf)
 			goto ebouncebuf;
 
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index f8d7a2f..37d9b36 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -692,7 +692,7 @@ static void *bnx2x_frag_alloc(const struct bnx2x_fastpath *fp, gfp_t gfp_mask)
 	if (fp->rx_frag_size) {
 		/* GFP_KERNEL allocations are used only during initialization */
 		if (unlikely(gfpflags_allow_blocking(gfp_mask)))
-			return (void *)__get_free_page(gfp_mask);
+			return get_free_page(gfp_mask);
 
 		return netdev_alloc_frag(fp->rx_frag_size);
 	}
diff --git a/drivers/net/ethernet/sfc/mcdi.c b/drivers/net/ethernet/sfc/mcdi.c
index 36c786b..972b9a7 100644
--- a/drivers/net/ethernet/sfc/mcdi.c
+++ b/drivers/net/ethernet/sfc/mcdi.c
@@ -76,7 +76,7 @@ int efx_mcdi_init(struct efx_nic *efx)
 	mcdi->efx = efx;
 #ifdef CONFIG_SFC_MCDI_LOGGING
 	/* consuming code assumes buffer is page-sized */
-	mcdi->logging_buffer = (char *)__get_free_page(GFP_KERNEL);
+	mcdi->logging_buffer = get_free_page(GFP_KERNEL);
 	if (!mcdi->logging_buffer)
 		goto fail1;
 	mcdi->logging_enabled = mcdi_logging_default;
diff --git a/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c b/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c
index c1b3142..9ece945 100644
--- a/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c
+++ b/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c
@@ -1412,7 +1412,7 @@ static struct iw_statistics *gelic_wl_get_wireless_stats(
 
 	pr_debug("%s: <-\n", __func__);
 
-	buf = (void *)__get_free_page(GFP_KERNEL);
+	buf = get_free_page(GFP_KERNEL);
 	if (!buf)
 		return NULL;
 
@@ -1472,7 +1472,7 @@ static int gelic_wl_start_scan(struct gelic_wl_info *wl, int always_scan,
 
 	/* ESSID scan ? */
 	if (essid_len && essid) {
-		buf = (void *)__get_free_page(GFP_KERNEL);
+		buf = get_free_page(GFP_KERNEL);
 		if (!buf) {
 			ret = -ENOMEM;
 			goto out;
@@ -1523,7 +1523,7 @@ static void gelic_wl_scan_complete_event(struct gelic_wl_info *wl)
 	pr_debug("%s:start\n", __func__);
 	mutex_lock(&wl->scan_lock);
 
-	buf = (void *)__get_free_page(GFP_KERNEL);
+	buf = get_free_page(GFP_KERNEL);
 	if (!buf) {
 		pr_info("%s: scan buffer alloc failed\n", __func__);
 		goto out;
@@ -1764,7 +1764,7 @@ static int gelic_wl_do_wep_setup(struct gelic_wl_info *wl)
 
 	pr_debug("%s: <-\n", __func__);
 	/* we can assume no one should uses the buffer */
-	wep = (struct gelic_eurus_wep_cfg *)__get_free_page(GFP_KERNEL);
+	wep = get_free_page(GFP_KERNEL);
 	if (!wep)
 		return -ENOMEM;
 
@@ -1854,7 +1854,7 @@ static int gelic_wl_do_wpa_setup(struct gelic_wl_info *wl)
 
 	pr_debug("%s: <-\n", __func__);
 	/* we can assume no one should uses the buffer */
-	wpa = (struct gelic_eurus_wpa_cfg *)__get_free_page(GFP_KERNEL);
+	wpa = get_free_page(GFP_KERNEL);
 	if (!wpa)
 		return -ENOMEM;
 
@@ -1935,7 +1935,7 @@ static int gelic_wl_associate_bss(struct gelic_wl_info *wl,
 	pr_debug("%s: <-\n", __func__);
 
 	/* do common config */
-	common = (struct gelic_eurus_common_cfg *)__get_free_page(GFP_KERNEL);
+	common = get_free_page(GFP_KERNEL);
 	if (!common)
 		return -ENOMEM;
 
diff --git a/drivers/net/usb/kaweth.c b/drivers/net/usb/kaweth.c
index a8493be..ae21f17 100644
--- a/drivers/net/usb/kaweth.c
+++ b/drivers/net/usb/kaweth.c
@@ -1047,7 +1047,7 @@ static int kaweth_probe(
 	} else {
 		/* Download the firmware */
 		dev_info(dev, "Downloading firmware...\n");
-		kaweth->firmware_buf = (__u8 *)__get_free_page(GFP_KERNEL);
+		kaweth->firmware_buf = get_free_page(GFP_KERNEL);
 		if ((result = kaweth_download_firmware(kaweth,
 						      "kaweth/new_code.bin",
 						      100,
diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
index 90b77b9..5e41853 100644
--- a/drivers/pci/xen-pcifront.c
+++ b/drivers/pci/xen-pcifront.c
@@ -725,8 +725,7 @@ static struct pcifront_device *alloc_pdev(struct xenbus_device *xdev)
 	if (pdev == NULL)
 		goto out;
 
-	pdev->sh_info =
-	    (struct xen_pci_sharedinfo *)__get_free_page(GFP_KERNEL);
+	pdev->sh_info = get_free_page(GFP_KERNEL);
 	if (pdev->sh_info == NULL) {
 		kfree(pdev);
 		pdev = NULL;
diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
index 996839f..43a750a 100644
--- a/drivers/platform/x86/dell-laptop.c
+++ b/drivers/platform/x86/dell-laptop.c
@@ -2145,7 +2145,7 @@ static int __init dell_init(void)
 	 * Allocate buffer below 4GB for SMI data--only 32-bit physical addr
 	 * is passed to SMI handler.
 	 */
-	buffer = (void *)__get_free_page(GFP_KERNEL | GFP_DMA32);
+	buffer = get_free_page(GFP_KERNEL | GFP_DMA32);
 	if (!buffer) {
 		ret = -ENOMEM;
 		goto fail_buffer;
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index c2d120a..10a2d5c 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -5118,7 +5118,7 @@ dasd_eckd_init(void)
 		kfree(dasd_reserve_req);
 		return -ENOMEM;
 	}
-	rawpadpage = (void *)__get_free_page(GFP_KERNEL);
+	rawpadpage = get_free_page(GFP_KERNEL);
 	if (!rawpadpage) {
 		kfree(path_verification_worker);
 		kfree(dasd_reserve_req);
diff --git a/drivers/s390/block/xpram.c b/drivers/s390/block/xpram.c
index 87d13a6..a4e3f391 100644
--- a/drivers/s390/block/xpram.c
+++ b/drivers/s390/block/xpram.c
@@ -145,7 +145,7 @@ static int xpram_present(void)
 	void *mem_page;
 	int rc;
 
-	mem_page = (void *)__get_free_page(GFP_KERNEL);
+	mem_page = get_free_page(GFP_KERNEL);
 	if (!mem_page)
 		return -ENOMEM;
 	rc = xpram_page_in(mem_page, 0);
@@ -161,7 +161,7 @@ static unsigned long xpram_highest_page_index(void)
 	unsigned int page_index, add_bit;
 	void *mem_page;
 
-	mem_page = (void *) __get_free_page(GFP_KERNEL);
+	mem_page = get_free_page(GFP_KERNEL);
 	if (!mem_page)
 		return 0;
 
diff --git a/drivers/s390/char/sclp_cmd.c b/drivers/s390/char/sclp_cmd.c
index 09b6c07..6bd6fd0 100644
--- a/drivers/s390/char/sclp_cmd.c
+++ b/drivers/s390/char/sclp_cmd.c
@@ -514,7 +514,7 @@ static int __init sclp_detect_standby_memory(void)
 	if ((sclp.facilities & 0xe00000000000ULL) != 0xe00000000000ULL)
 		return 0;
 	rc = -ENOMEM;
-	sccb = (void *) __get_free_page(GFP_KERNEL | GFP_DMA);
+	sccb = get_free_page(GFP_KERNEL | GFP_DMA);
 	if (!sccb)
 		goto out;
 	assigned = 0;
diff --git a/drivers/s390/char/vmur.c b/drivers/s390/char/vmur.c
index 3974f34..02634f4c 100644
--- a/drivers/s390/char/vmur.c
+++ b/drivers/s390/char/vmur.c
@@ -524,7 +524,7 @@ static ssize_t diag14_read(struct file *file, char __user *ubuf, size_t count,
 		return rc;
 
 	len = min((size_t) PAGE_SIZE, count);
-	buf = (char *) __get_free_page(GFP_KERNEL | GFP_DMA);
+	buf = get_free_page(GFP_KERNEL | GFP_DMA);
 	if (!buf)
 		return -ENOMEM;
 
@@ -616,7 +616,7 @@ static int verify_uri_device(struct urdev *urd)
 	}
 
 	/* open file on virtual reader	*/
-	buf = (char *) __get_free_page(GFP_KERNEL | GFP_DMA);
+	buf = get_free_page(GFP_KERNEL | GFP_DMA);
 	if (!buf) {
 		rc = -ENOMEM;
 		goto fail_free_fcb;
diff --git a/drivers/s390/char/zcore.c b/drivers/s390/char/zcore.c
index 4a6f730..fe18b41 100644
--- a/drivers/s390/char/zcore.c
+++ b/drivers/s390/char/zcore.c
@@ -616,7 +616,7 @@ static int __init zcore_reipl_init(void)
 		return rc;
 	if (ipib_info.ipib == 0)
 		return 0;
-	ipl_block = (void *) __get_free_page(GFP_KERNEL);
+	ipl_block = get_free_page(GFP_KERNEL);
 	if (!ipl_block)
 		return -ENOMEM;
 	if (ipib_info.ipib < sclp.hsa_size)
diff --git a/drivers/s390/cio/qdio_setup.c b/drivers/s390/cio/qdio_setup.c
index 7322dd3..d842c56 100644
--- a/drivers/s390/cio/qdio_setup.c
+++ b/drivers/s390/cio/qdio_setup.c
@@ -144,7 +144,7 @@ static int __qdio_allocate_qs(struct qdio_q **irq_ptr_qs, int nr_queues)
 		if (!q)
 			return -ENOMEM;
 
-		q->slib = (struct slib *) __get_free_page(GFP_KERNEL);
+		q->slib = get_free_page(GFP_KERNEL);
 		if (!q->slib) {
 			kmem_cache_free(qdio_q_cache, q);
 			return -ENOMEM;
@@ -305,7 +305,7 @@ int qdio_setup_get_ssqd(struct qdio_irq *irq_ptr,
 
 	DBF_EVENT("getssqd:%4x", schid->sch_no);
 	if (!irq_ptr) {
-		ssqd = (struct chsc_ssqd_area *)__get_free_page(GFP_KERNEL);
+		ssqd = get_free_page(GFP_KERNEL);
 		if (!ssqd)
 			return -ENOMEM;
 	} else {
diff --git a/drivers/s390/cio/scm.c b/drivers/s390/cio/scm.c
index db1812e..90dbe36 100644
--- a/drivers/s390/cio/scm.c
+++ b/drivers/s390/cio/scm.c
@@ -226,7 +226,7 @@ int scm_update_information(void)
 	size_t num;
 	int ret;
 
-	scm_info = (void *)__get_free_page(GFP_KERNEL | GFP_DMA);
+	scm_info = get_free_page(GFP_KERNEL | GFP_DMA);
 	if (!scm_info)
 		return -ENOMEM;
 
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index 18f4db4..f6de41b 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -265,7 +265,7 @@ static int qeth_alloc_buffer_pool(struct qeth_card *card)
 			return -ENOMEM;
 		}
 		for (j = 0; j < QETH_MAX_BUFFER_ELEMENTS(card); ++j) {
-			ptr = (void *) __get_free_page(GFP_KERNEL);
+			ptr = get_free_page(GFP_KERNEL);
 			if (!ptr) {
 				while (j > 0)
 					free_page(pool_entry->elements[--j]);
diff --git a/drivers/scsi/cxlflash/main.c b/drivers/scsi/cxlflash/main.c
index ff85994..cd29652 100644
--- a/drivers/scsi/cxlflash/main.c
+++ b/drivers/scsi/cxlflash/main.c
@@ -776,7 +776,7 @@ static int alloc_mem(struct cxlflash_cfg *cfg)
 
 	for (i = 0; i < CXLFLASH_NUM_CMDS; buf += CMD_BUFSIZE, i++) {
 		if (!((u64)buf & (PAGE_SIZE - 1))) {
-			buf = (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
+			buf = get_free_page(GFP_KERNEL | __GFP_ZERO);
 			if (unlikely(!buf)) {
 				dev_err(dev,
 					"%s: Allocate command buffers fail!\n",
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index 1a05ba8..b80245b 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -2904,7 +2904,7 @@ static int ipr_sdt_copy(struct ipr_ioa_cfg *ioa_cfg,
 	       (ioa_dump->hdr.len + bytes_copied) < max_dump_size) {
 		if (ioa_dump->page_offset >= PAGE_SIZE ||
 		    ioa_dump->page_offset == 0) {
-			page = (__be32 *)__get_free_page(GFP_ATOMIC);
+			page = get_free_page(GFP_ATOMIC);
 
 			if (!page) {
 				ipr_trace;
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
index 2f93f80..1893e6c 100644
--- a/drivers/scsi/scsi_devinfo.c
+++ b/drivers/scsi/scsi_devinfo.c
@@ -707,7 +707,7 @@ static ssize_t proc_scsi_devinfo_write(struct file *file,
 
 	if (!buf || length>PAGE_SIZE)
 		return -EINVAL;
-	if (!(buffer = (char *) __get_free_page(GFP_KERNEL)))
+	if (!(buffer = get_free_page(GFP_KERNEL)))
 		return -ENOMEM;
 	if (copy_from_user(buffer, buf, length)) {
 		err =-EFAULT;
diff --git a/drivers/scsi/scsi_proc.c b/drivers/scsi/scsi_proc.c
index e0e0e5d..71bee2d 100644
--- a/drivers/scsi/scsi_proc.c
+++ b/drivers/scsi/scsi_proc.c
@@ -58,7 +58,7 @@ static ssize_t proc_scsi_host_write(struct file *file, const char __user *buf,
 	if (!shost->hostt->write_info)
 		return -EINVAL;
 
-	page = (char *)__get_free_page(GFP_KERNEL);
+	page = get_free_page(GFP_KERNEL);
 	if (page) {
 		ret = -EFAULT;
 		if (copy_from_user(page, buf, count))
@@ -315,7 +315,7 @@ static ssize_t proc_scsi_write(struct file *file, const char __user *buf,
 	if (!buf || length > PAGE_SIZE)
 		return -EINVAL;
 
-	buffer = (char *)__get_free_page(GFP_KERNEL);
+	buffer = get_free_page(GFP_KERNEL);
 	if (!buffer)
 		return -ENOMEM;
 
diff --git a/drivers/scsi/xen-scsifront.c b/drivers/scsi/xen-scsifront.c
index 825759b..93dc086 100644
--- a/drivers/scsi/xen-scsifront.c
+++ b/drivers/scsi/xen-scsifront.c
@@ -718,7 +718,7 @@ static int scsifront_alloc_ring(struct vscsifrnt_info *info)
 	int err = -ENOMEM;
 
 	/***** Frontend to Backend ring start *****/
-	sring = (struct vscsiif_sring *)__get_free_page(GFP_KERNEL);
+	sring = get_free_page(GFP_KERNEL);
 	if (!sring) {
 		xenbus_dev_fatal(dev, err,
 			"fail to allocate shared ring (Front to Back)");
diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c
index b8286e7..eea6e9b 100644
--- a/drivers/spi/spi-sh-msiof.c
+++ b/drivers/spi/spi-sh-msiof.c
@@ -1092,11 +1092,11 @@ static int sh_msiof_request_dma(struct sh_msiof_spi_priv *p)
 	if (!master->dma_rx)
 		goto free_tx_chan;
 
-	p->tx_dma_page = (void *)__get_free_page(GFP_KERNEL | GFP_DMA);
+	p->tx_dma_page = get_free_page(GFP_KERNEL | GFP_DMA);
 	if (!p->tx_dma_page)
 		goto free_rx_chan;
 
-	p->rx_dma_page = (void *)__get_free_page(GFP_KERNEL | GFP_DMA);
+	p->rx_dma_page = get_free_page(GFP_KERNEL | GFP_DMA);
 	if (!p->rx_dma_page)
 		goto free_tx_page;
 
diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c
index 92259be..f675ab3 100644
--- a/drivers/staging/lustre/lustre/llite/llite_lib.c
+++ b/drivers/staging/lustre/lustre/llite/llite_lib.c
@@ -2268,7 +2268,7 @@ void ll_dirty_page_discard_warn(struct page *page, int ioret)
 	struct ccc_object *obj = cl_inode2ccc(page->mapping->host);
 
 	/* this can be called inside spin lock so use GFP_ATOMIC. */
-	buf = (char *)__get_free_page(GFP_ATOMIC);
+	buf = get_free_page(GFP_ATOMIC);
 	if (buf != NULL) {
 		dentry = d_find_alias(page->mapping->host);
 		if (dentry != NULL)
diff --git a/drivers/staging/unisys/visorbus/visorchannel.c b/drivers/staging/unisys/visorbus/visorchannel.c
index 486bef0..35471c4 100644
--- a/drivers/staging/unisys/visorbus/visorchannel.c
+++ b/drivers/staging/unisys/visorbus/visorchannel.c
@@ -279,7 +279,7 @@ visorchannel_clear(struct visorchannel *channel, ulong offset, u8 ch,
 	int written = 0;
 	u8 *buf;
 
-	buf = (u8 *)__get_free_page(GFP_KERNEL);
+	buf = get_free_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
index ca682ec..86ad9ea 100644
--- a/drivers/target/target_core_file.c
+++ b/drivers/target/target_core_file.c
@@ -460,7 +460,7 @@ fd_do_prot_unmap(struct se_cmd *cmd, sector_t lba, sector_t nolb)
 	void *buf;
 	int rc;
 
-	buf = (void *)__get_free_page(GFP_KERNEL);
+	buf = get_free_page(GFP_KERNEL);
 	if (!buf) {
 		pr_err("Unable to allocate FILEIO prot buf\n");
 		return -ENOMEM;
diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
index 4f7716d..423d2cf 100644
--- a/drivers/tty/hvc/hvc_xen.c
+++ b/drivers/tty/hvc/hvc_xen.c
@@ -445,7 +445,7 @@ static int xencons_probe(struct xenbus_device *dev,
 	dev_set_drvdata(&dev->dev, info);
 	info->xbdev = dev;
 	info->vtermno = xenbus_devid_to_vtermno(devid);
-	info->intf = (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
+	info->intf = get_free_page(GFP_KERNEL | __GFP_ZERO);
 	if (!info->intf)
 		goto error_nomem;
 
diff --git a/drivers/tty/hvc/hvcs.c b/drivers/tty/hvc/hvcs.c
index fb3f4cd..29320d0 100644
--- a/drivers/tty/hvc/hvcs.c
+++ b/drivers/tty/hvc/hvcs.c
@@ -1532,7 +1532,7 @@ static int hvcs_initialize(void)
 		goto register_fail;
 	}
 
-	hvcs_pi_buff = (unsigned long *) __get_free_page(GFP_KERNEL);
+	hvcs_pi_buff = get_free_page(GFP_KERNEL);
 	if (!hvcs_pi_buff) {
 		rc = -ENOMEM;
 		goto buff_alloc_fail;
diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index ee78fc2..56bd374 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -865,7 +865,7 @@ static int mxser_activate(struct tty_port *port, struct tty_struct *tty)
 	unsigned char *page;
 	unsigned long flags;
 
-	page = (unsigned char *)__get_free_page(GFP_KERNEL);
+	page = get_free_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
diff --git a/drivers/tty/rocket.c b/drivers/tty/rocket.c
index 78f0330..fc2d1ef 100644
--- a/drivers/tty/rocket.c
+++ b/drivers/tty/rocket.c
@@ -891,7 +891,7 @@ static int rp_open(struct tty_struct *tty, struct file *filp)
 		return -ENXIO;
 	port = &info->port;
 	
-	page = (unsigned char *)__get_free_page(GFP_KERNEL);
+	page = get_free_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
diff --git a/drivers/tty/serial/68328serial.c b/drivers/tty/serial/68328serial.c
index 4485466..5fac3e7 100644
--- a/drivers/tty/serial/68328serial.c
+++ b/drivers/tty/serial/68328serial.c
@@ -379,7 +379,7 @@ static int startup(struct m68k_serial *info, struct tty_struct *tty)
 		return 0;
 
 	if (!info->xmit_buf) {
-		info->xmit_buf = (unsigned char *) __get_free_page(GFP_KERNEL);
+		info->xmit_buf = get_free_page(GFP_KERNEL);
 		if (!info->xmit_buf)
 			return -ENOMEM;
 	}
diff --git a/drivers/tty/serial/men_z135_uart.c b/drivers/tty/serial/men_z135_uart.c
index df3c6ad..534b2ed 100644
--- a/drivers/tty/serial/men_z135_uart.c
+++ b/drivers/tty/serial/men_z135_uart.c
@@ -824,7 +824,7 @@ static int men_z135_probe(struct mcb_device *mdev,
 	if (!uart)
 		return -ENOMEM;
 
-	uart->rxbuf = (unsigned char *)__get_free_page(GFP_KERNEL);
+	uart->rxbuf = get_free_page(GFP_KERNEL);
 	if (!uart->rxbuf)
 		return -ENOMEM;
 
diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c
index 7e461e0..daee5b8 100644
--- a/drivers/tty/serial/pch_uart.c
+++ b/drivers/tty/serial/pch_uart.c
@@ -1771,7 +1771,7 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev,
 	if (priv == NULL)
 		goto init_port_alloc_err;
 
-	rxbuf = (unsigned char *)__get_free_page(GFP_KERNEL);
+	rxbuf = get_free_page(GFP_KERNEL);
 	if (!rxbuf)
 		goto init_port_free_txbuf;
 
diff --git a/drivers/tty/vt/vc_screen.c b/drivers/tty/vt/vc_screen.c
index 5d25934..7227efe 100644
--- a/drivers/tty/vt/vc_screen.c
+++ b/drivers/tty/vt/vc_screen.c
@@ -206,7 +206,7 @@ vcs_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
 	ssize_t ret;
 	char *con_buf;
 
-	con_buf = (char *) __get_free_page(GFP_KERNEL);
+	con_buf = get_free_page(GFP_KERNEL);
 	if (!con_buf)
 		return -ENOMEM;
 
@@ -384,7 +384,7 @@ vcs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
 	size_t ret;
 	char *con_buf;
 
-	con_buf = (char *) __get_free_page(GFP_KERNEL);
+	con_buf = get_free_page(GFP_KERNEL);
 	if (!con_buf)
 		return -ENOMEM;
 
diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c
index f03bc30..e078eeb 100644
--- a/drivers/usb/atm/cxacru.c
+++ b/drivers/usb/atm/cxacru.c
@@ -942,7 +942,7 @@ static int cxacru_fw(struct usb_device *usb_dev, enum cxacru_fw_request fw,
 	int offd, offb;
 	const int stride = CMD_PACKET_SIZE - 8;
 
-	buf = (u8 *) __get_free_page(GFP_KERNEL);
+	buf = get_free_page(GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 
@@ -1152,13 +1152,13 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance,
 
 	mutex_init(&instance->adsl_state_serialize);
 
-	instance->rcv_buf = (u8 *) __get_free_page(GFP_KERNEL);
+	instance->rcv_buf = get_free_page(GFP_KERNEL);
 	if (!instance->rcv_buf) {
 		usb_dbg(usbatm_instance, "cxacru_bind: no memory for rcv_buf\n");
 		ret = -ENOMEM;
 		goto fail;
 	}
-	instance->snd_buf = (u8 *) __get_free_page(GFP_KERNEL);
+	instance->snd_buf = get_free_page(GFP_KERNEL);
 	if (!instance->snd_buf) {
 		usb_dbg(usbatm_instance, "cxacru_bind: no memory for snd_buf\n");
 		ret = -ENOMEM;
diff --git a/drivers/usb/atm/speedtch.c b/drivers/usb/atm/speedtch.c
index 681599f..e6a1ff8 100644
--- a/drivers/usb/atm/speedtch.c
+++ b/drivers/usb/atm/speedtch.c
@@ -255,7 +255,7 @@ static int speedtch_upload_firmware(struct speedtch_instance_data *instance,
 
 	usb_dbg(usbatm, "%s entered\n", __func__);
 
-	buffer = (unsigned char *)__get_free_page(GFP_KERNEL);
+	buffer = get_free_page(GFP_KERNEL);
 	if (!buffer) {
 		ret = -ENOMEM;
 		usb_dbg(usbatm, "%s: no memory for buffer!\n", __func__);
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index c2cef46..af957f0 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -988,7 +988,7 @@ static int proc_control(struct usb_dev_state *ps, void __user *arg)
 			sizeof(struct usb_ctrlrequest));
 	if (ret)
 		return ret;
-	tbuf = (unsigned char *)__get_free_page(GFP_KERNEL);
+	tbuf = get_free_page(GFP_KERNEL);
 	if (!tbuf) {
 		ret = -ENOMEM;
 		goto done;
diff --git a/drivers/usb/misc/rio500.c b/drivers/usb/misc/rio500.c
index 3c49061..f50166565 100644
--- a/drivers/usb/misc/rio500.c
+++ b/drivers/usb/misc/rio500.c
@@ -139,7 +139,7 @@ static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
 			retval = -EINVAL;
 			goto err_out;
 		}
-		buffer = (unsigned char *) __get_free_page(GFP_KERNEL);
+		buffer = get_free_page(GFP_KERNEL);
 		if (buffer == NULL) {
 			retval = -ENOMEM;
 			goto err_out;
@@ -210,7 +210,7 @@ static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
 			retval = -EINVAL;
 			goto err_out;
 		}
-		buffer = (unsigned char *) __get_free_page(GFP_KERNEL);
+		buffer = get_free_page(GFP_KERNEL);
 		if (buffer == NULL) {
 			retval = -ENOMEM;
 			goto err_out;
diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
index de9ff1b..fbebc5d 100644
--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -525,7 +525,7 @@ int usb_wwan_port_probe(struct usb_serial_port *port)
 	init_usb_anchor(&portdata->delayed);
 
 	for (i = 0; i < N_IN_URB; i++) {
-		buffer = (u8 *)__get_free_page(GFP_KERNEL);
+		buffer = get_free_page(GFP_KERNEL);
 		if (!buffer)
 			goto bail_out_error;
 		portdata->in_buffer[i] = buffer;
diff --git a/drivers/uwb/hwa-rc.c b/drivers/uwb/hwa-rc.c
index 2d3334f..b92ef24 100644
--- a/drivers/uwb/hwa-rc.c
+++ b/drivers/uwb/hwa-rc.c
@@ -695,7 +695,7 @@ static int hwarc_neep_init(struct uwb_rc *rc)
 	struct usb_endpoint_descriptor *epd;
 
 	epd = &iface->cur_altsetting->endpoint[0].desc;
-	hwarc->rd_buffer = (void *) __get_free_page(GFP_KERNEL);
+	hwarc->rd_buffer = get_free_page(GFP_KERNEL);
 	if (hwarc->rd_buffer == NULL) {
 		dev_err(dev, "Unable to allocate notification's read buffer\n");
 		goto error_rd_buffer;
diff --git a/drivers/video/fbdev/xen-fbfront.c b/drivers/video/fbdev/xen-fbfront.c
index b126f77..11ecb95 100644
--- a/drivers/video/fbdev/xen-fbfront.c
+++ b/drivers/video/fbdev/xen-fbfront.c
@@ -407,7 +407,7 @@ static int xenfb_probe(struct xenbus_device *dev,
 		goto error_nomem;
 
 	/* set up shared page */
-	info->page = (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
+	info->page = get_free_page(GFP_KERNEL | __GFP_ZERO);
 	if (!info->page)
 		goto error_nomem;
 
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
index 0fe5889..b107c3e 100644
--- a/drivers/xen/events/events_base.c
+++ b/drivers/xen/events/events_base.c
@@ -1688,7 +1688,7 @@ void __init xen_init_IRQ(void)
 		int rc;
 		struct physdev_pirq_eoi_gmfn eoi_gmfn;
 
-		pirq_eoi_map = (void *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
+		pirq_eoi_map = get_free_page(GFP_KERNEL|__GFP_ZERO);
 		eoi_gmfn.gmfn = virt_to_gfn(pirq_eoi_map);
 		rc = HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_gmfn_v2, &eoi_gmfn);
 		/* TODO: No PVH support for PIRQ EOI */
diff --git a/drivers/xen/events/events_fifo.c b/drivers/xen/events/events_fifo.c
index 722c2a0..cc3857c 100644
--- a/drivers/xen/events/events_fifo.c
+++ b/drivers/xen/events/events_fifo.c
@@ -156,7 +156,7 @@ static int evtchn_fifo_setup(struct irq_info *info)
 		/* Might already have a page if we've resumed. */
 		array_page = event_array[event_array_pages];
 		if (!array_page) {
-			array_page = (void *)__get_free_page(GFP_KERNEL);
+			array_page = get_free_page(GFP_KERNEL);
 			if (array_page == NULL) {
 				ret = -ENOMEM;
 				goto error;
@@ -391,7 +391,7 @@ static int evtchn_fifo_alloc_control_block(unsigned cpu)
 	void *control_block = NULL;
 	int ret = -ENOMEM;
 
-	control_block = (void *)__get_free_page(GFP_KERNEL);
+	control_block = get_free_page(GFP_KERNEL);
 	if (control_block == NULL)
 		goto error;
 
diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
index bcd5f54..5c044a2 100644
--- a/drivers/xen/evtchn.c
+++ b/drivers/xen/evtchn.c
@@ -270,7 +270,7 @@ static ssize_t evtchn_write(struct file *file, const char __user *buf,
 			    size_t count, loff_t *ppos)
 {
 	int rc, i;
-	evtchn_port_t *kbuf = (evtchn_port_t *)__get_free_page(GFP_KERNEL);
+	evtchn_port_t *kbuf = get_free_page(GFP_KERNEL);
 	struct per_user_data *u = file->private_data;
 
 	if (kbuf == NULL)
diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
index 29d88da..00e7130 100644
--- a/drivers/xen/grant-table.c
+++ b/drivers/xen/grant-table.c
@@ -577,7 +577,7 @@ static int grow_gnttab_list(unsigned int more_frames)
 	new_nr_glist_frames =
 		(new_nr_grant_frames * grefs_per_grant_frame + RPP - 1) / RPP;
 	for (i = nr_glist_frames; i < new_nr_glist_frames; i++) {
-		gnttab_list[i] = (grant_ref_t *)__get_free_page(GFP_ATOMIC);
+		gnttab_list[i] = get_free_page(GFP_ATOMIC);
 		if (!gnttab_list[i])
 			goto grow_nomem;
 	}
@@ -1109,7 +1109,7 @@ int gnttab_init(void)
 
 	nr_glist_frames = (nr_grant_frames * grefs_per_grant_frame + RPP - 1) / RPP;
 	for (i = 0; i < nr_glist_frames; i++) {
-		gnttab_list[i] = (grant_ref_t *)__get_free_page(GFP_KERNEL);
+		gnttab_list[i] = get_free_page(GFP_KERNEL);
 		if (gnttab_list[i] == NULL) {
 			ret = -ENOMEM;
 			goto ini_nomem;
diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
index a7ab050..5479f6f 100644
--- a/fs/binfmt_misc.c
+++ b/fs/binfmt_misc.c
@@ -607,7 +607,7 @@ bm_entry_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
 	ssize_t res;
 	char *page;
 
-	page = (char *) __get_free_page(GFP_KERNEL);
+	page = get_free_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
index 37b4ae3..c3755f0 100644
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -1373,7 +1373,7 @@ static const char *fuse_follow_link(struct dentry *dentry, void **cookie)
 	char *link;
 	ssize_t ret;
 
-	link = (char *) __get_free_page(GFP_KERNEL);
+	link = get_free_page(GFP_KERNEL);
 	if (!link)
 		return ERR_PTR(-ENOMEM);
 
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index a07709b..2e44926 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -2458,7 +2458,7 @@ long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
 
 	err = -ENOMEM;
 	pages = kcalloc(FUSE_MAX_PAGES_PER_REQ, sizeof(pages[0]), GFP_KERNEL);
-	iov_page = (struct iovec *) __get_free_page(GFP_KERNEL);
+	iov_page = get_free_page(GFP_KERNEL);
 	if (!pages || !iov_page)
 		goto out;
 
diff --git a/fs/isofs/dir.c b/fs/isofs/dir.c
index 2d495b5..63199f6 100644
--- a/fs/isofs/dir.c
+++ b/fs/isofs/dir.c
@@ -253,7 +253,7 @@ static int isofs_readdir(struct file *file, struct dir_context *ctx)
 	struct iso_directory_record *tmpde;
 	struct inode *inode = file_inode(file);
 
-	tmpname = (char *)__get_free_page(GFP_KERNEL);
+	tmpname = get_free_page(GFP_KERNEL);
 	if (tmpname == NULL)
 		return -ENOMEM;
 
diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c
index 56d18de..1007b44 100644
--- a/fs/jfs/jfs_dtree.c
+++ b/fs/jfs/jfs_dtree.c
@@ -3180,7 +3180,7 @@ int jfs_readdir(struct file *file, struct dir_context *ctx)
 		}
 	}
 
-	dirent_buf = (void *)__get_free_page(GFP_KERNEL);
+	dirent_buf = get_free_page(GFP_KERNEL);
 	if (!dirent_buf) {
 		DT_PUTPAGE(mp);
 		jfs_warn("jfs_readdir: __get_free_page failed!");
diff --git a/fs/namespace.c b/fs/namespace.c
index 4bcae39..5f1245c 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -2611,7 +2611,7 @@ int copy_mount_options(const void __user * data, void **where)
 	if (!data)
 		return 0;
 
-	if (!(page = (char *)__get_free_page(GFP_KERNEL)))
+	if (!(page = get_free_page(GFP_KERNEL)))
 		return -ENOMEM;
 
 	/* We only care that *some* data at the address the user
diff --git a/fs/nfs/namespace.c b/fs/nfs/namespace.c
index faa1ce5..20b38fa 100644
--- a/fs/nfs/namespace.c
+++ b/fs/nfs/namespace.c
@@ -248,7 +248,7 @@ struct vfsmount *nfs_do_submount(struct dentry *dentry, struct nfs_fh *fh,
 		.authflavor = authflavor,
 	};
 	struct vfsmount *mnt = ERR_PTR(-ENOMEM);
-	char *page = (char *) __get_free_page(GFP_USER);
+	char *page = get_free_page(GFP_USER);
 	char *devname;
 
 	dprintk("--> nfs_do_submount()\n");
diff --git a/fs/nfs/nfs4namespace.c b/fs/nfs/nfs4namespace.c
index 82b1537..7a6565a 100644
--- a/fs/nfs/nfs4namespace.c
+++ b/fs/nfs/nfs4namespace.c
@@ -310,11 +310,11 @@ static struct vfsmount *nfs_follow_referral(struct dentry *dentry,
 
 	dprintk("%s: referral at %pd2\n", __func__, dentry);
 
-	page = (char *) __get_free_page(GFP_USER);
+	page = get_free_page(GFP_USER);
 	if (!page)
 		goto out;
 
-	page2 = (char *) __get_free_page(GFP_USER);
+	page2 = get_free_page(GFP_USER);
 	if (!page2)
 		goto out;
 
@@ -495,10 +495,10 @@ int nfs4_replace_transport(struct nfs_server *server,
 		goto out;
 
 	error = -ENOMEM;
-	page = (char *) __get_free_page(GFP_USER);
+	page = get_free_page(GFP_USER);
 	if (!page)
 		goto out;
-	page2 = (char *) __get_free_page(GFP_USER);
+	page2 = get_free_page(GFP_USER);
 	if (!page2)
 		goto out;
 
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index ba0ad91..427d0a9 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -779,7 +779,7 @@ static void show_implementation_id(struct seq_file *m, struct nfs_server *nfss)
 
 int nfs_show_devname(struct seq_file *m, struct dentry *root)
 {
-	char *page = (char *) __get_free_page(GFP_KERNEL);
+	char *page = get_free_page(GFP_KERNEL);
 	char *devname, *dummy;
 	int err = 0;
 	if (!page)
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index e9df47b..8a10704 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -1800,7 +1800,7 @@ static __be32 nfsd_buffered_readdir(struct file *file, nfsd_filldir_t func,
 	loff_t offset;
 	struct readdir_data buf = {
 		.ctx.actor = nfsd_buffered_filldir,
-		.dirent = (void *)__get_free_page(GFP_KERNEL)
+		.dirent = get_free_page(GFP_KERNEL)
 	};
 
 	if (!buf.dirent)
diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c
index 841d822..4a80983 100644
--- a/fs/ocfs2/dlm/dlmdomain.c
+++ b/fs/ocfs2/dlm/dlmdomain.c
@@ -92,7 +92,7 @@ static void **dlm_alloc_pagevec(int pages)
 		return NULL;
 
 	for (i = 0; i < pages; i++)
-		if (!(vec[i] = (void *)__get_free_page(GFP_KERNEL)))
+		if (!(vec[i] = get_free_page(GFP_KERNEL)))
 			goto out_free;
 
 	mlog(0, "Allocated DLM hash pagevec; %d pages (%lu expected), %lu buckets per page\n",
diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
index a0edd7e..2d5c2c38 100644
--- a/fs/ocfs2/dlm/dlmmaster.c
+++ b/fs/ocfs2/dlm/dlmmaster.c
@@ -2498,7 +2498,7 @@ static int dlm_migrate_lockres(struct dlm_ctxt *dlm,
 
 	/* preallocate up front. if this fails, abort */
 	ret = -ENOMEM;
-	mres = (struct dlm_migratable_lockres *) __get_free_page(GFP_NOFS);
+	mres = get_free_page(GFP_NOFS);
 	if (!mres) {
 		mlog_errno(ret);
 		goto leave;
diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c
index 7368158..a2338d8 100644
--- a/fs/ocfs2/dlm/dlmrecovery.c
+++ b/fs/ocfs2/dlm/dlmrecovery.c
@@ -856,7 +856,7 @@ int dlm_request_all_locks_handler(struct o2net_msg *msg, u32 len, void *data,
 	}
 
 	/* this will get freed by dlm_request_all_locks_worker */
-	buf = (char *) __get_free_page(GFP_NOFS);
+	buf = get_free_page(GFP_NOFS);
 	if (!buf) {
 		kfree(item);
 		dlm_put(dlm);
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index b3f1da5..0c66579 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -134,7 +134,7 @@ static char *ovl_read_symlink(struct dentry *realdentry)
 		goto err;
 
 	res = -ENOMEM;
-	buf = (char *) __get_free_page(GFP_KERNEL);
+	buf = get_free_page(GFP_KERNEL);
 	if (!buf)
 		goto err;
 
diff --git a/fs/proc/base.c b/fs/proc/base.c
index a9828e5..f115e58 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -224,7 +224,7 @@ static ssize_t proc_pid_cmdline_read(struct file *file, char __user *buf,
 		goto out_mmput;
 	}
 
-	page = (char *)__get_free_page(GFP_TEMPORARY);
+	page = get_free_page(GFP_TEMPORARY);
 	if (!page) {
 		rv = -ENOMEM;
 		goto out_mmput;
@@ -855,7 +855,7 @@ static ssize_t mem_rw(struct file *file, char __user *buf,
 	if (!mm)
 		return 0;
 
-	page = (char *)__get_free_page(GFP_TEMPORARY);
+	page = get_free_page(GFP_TEMPORARY);
 	if (!page)
 		return -ENOMEM;
 
@@ -956,7 +956,7 @@ static ssize_t environ_read(struct file *file, char __user *buf,
 	if (!mm)
 		return 0;
 
-	page = (char *)__get_free_page(GFP_TEMPORARY);
+	page = get_free_page(GFP_TEMPORARY);
 	if (!page)
 		return -ENOMEM;
 
@@ -1586,7 +1586,7 @@ out:
 
 static int do_proc_readlink(struct path *path, char __user *buffer, int buflen)
 {
-	char *tmp = (char*)__get_free_page(GFP_TEMPORARY);
+	char *tmp = get_free_page(GFP_TEMPORARY);
 	char *pathname;
 	int len;
 
@@ -2375,7 +2375,7 @@ static ssize_t proc_pid_attr_write(struct file * file, const char __user * buf,
 		goto out;
 
 	length = -ENOMEM;
-	page = (char*)__get_free_page(GFP_TEMPORARY);
+	page = get_free_page(GFP_TEMPORARY);
 	if (!page)
 		goto out;
 
diff --git a/fs/select.c b/fs/select.c
index 6acb0ae..8619de7 100644
--- a/fs/select.c
+++ b/fs/select.c
@@ -165,7 +165,7 @@ static struct poll_table_entry *poll_get_entry(struct poll_wqueues *p)
 	if (!table || POLL_TABLE_FULL(table)) {
 		struct poll_table_page *new_table;
 
-		new_table = (struct poll_table_page *) __get_free_page(GFP_KERNEL);
+		new_table = get_free_page(GFP_KERNEL);
 		if (!new_table) {
 			p->error = -ENOMEM;
 			return NULL;
diff --git a/include/linux/quicklist.h b/include/linux/quicklist.h
index bd46643..fa5ecd2 100644
--- a/include/linux/quicklist.h
+++ b/include/linux/quicklist.h
@@ -46,7 +46,7 @@ static inline void *quicklist_alloc(int nr, gfp_t flags, void (*ctor)(void *))
 	if (likely(p))
 		return p;
 
-	p = (void *)__get_free_page(flags | __GFP_ZERO);
+	p = get_free_page(flags | __GFP_ZERO);
 	if (ctor && p)
 		ctor(p);
 	return p;
diff --git a/kernel/groups.c b/kernel/groups.c
index 88f7e1a8..e978016c 100644
--- a/kernel/groups.c
+++ b/kernel/groups.c
@@ -30,7 +30,7 @@ struct group_info *groups_alloc(int gidsetsize)
 	else {
 		for (i = 0; i < nblocks; i++) {
 			kgid_t *b;
-			b = (void *)__get_free_page(GFP_USER);
+			b = get_free_page(GFP_USER);
 			if (!b)
 				goto out_undo_partial_alloc;
 			group_info->blocks[i] = b;
diff --git a/kernel/power/swap.c b/kernel/power/swap.c
index 5bbe897..f64d341 100644
--- a/kernel/power/swap.c
+++ b/kernel/power/swap.c
@@ -356,7 +356,7 @@ static int write_page(void *buf, sector_t offset, struct hib_bio_batch *hb)
 		return -ENOSPC;
 
 	if (hb) {
-		src = (void *)__get_free_page(__GFP_RECLAIM | __GFP_NOWARN |
+		src = get_free_page(__GFP_RECLAIM | __GFP_NOWARN |
 		                              __GFP_NORETRY);
 		if (src) {
 			copy_page(src, buf);
@@ -364,7 +364,7 @@ static int write_page(void *buf, sector_t offset, struct hib_bio_batch *hb)
 			ret = hib_wait_io(hb); /* Free pages */
 			if (ret)
 				return ret;
-			src = (void *)__get_free_page(__GFP_RECLAIM |
+			src = get_free_page(__GFP_RECLAIM |
 			                              __GFP_NOWARN |
 			                              __GFP_NORETRY);
 			if (src) {
@@ -672,7 +672,7 @@ static int save_image_lzo(struct swap_map_handle *handle,
 	nr_threads = num_online_cpus() - 1;
 	nr_threads = clamp_val(nr_threads, 1, LZO_THREADS);
 
-	page = (void *)__get_free_page(__GFP_RECLAIM | __GFP_HIGH);
+	page = get_free_page(__GFP_RECLAIM | __GFP_HIGH);
 	if (!page) {
 		printk(KERN_ERR "PM: Failed to allocate LZO page\n");
 		ret = -ENOMEM;
@@ -974,8 +974,7 @@ static int get_swap_reader(struct swap_map_handle *handle,
 			last->next = tmp;
 		last = tmp;
 
-		tmp->map = (struct swap_map_page *)
-			   __get_free_page(__GFP_RECLAIM | __GFP_HIGH);
+		tmp->map = get_free_page(__GFP_RECLAIM | __GFP_HIGH);
 		if (!tmp->map) {
 			release_swap_reader(handle);
 			return -ENOMEM;
@@ -1241,7 +1240,7 @@ static int load_image_lzo(struct swap_map_handle *handle,
 	read_pages = clamp_val(read_pages, LZO_MIN_RD_PAGES, LZO_MAX_RD_PAGES);
 
 	for (i = 0; i < read_pages; i++) {
-		page[i] = (void *)__get_free_page(i < LZO_CMP_PAGES ?
+		page[i] = get_free_page(i < LZO_CMP_PAGES ?
 						  __GFP_RECLAIM | __GFP_HIGH :
 						  __GFP_RECLAIM | __GFP_NOWARN |
 						  __GFP_NORETRY);
@@ -1580,7 +1579,7 @@ int swsusp_unmark(void)
 
 static int swsusp_header_init(void)
 {
-	swsusp_header = (struct swsusp_header*) __get_free_page(GFP_KERNEL);
+	swsusp_header =  get_free_page(GFP_KERNEL);
 	if (!swsusp_header)
 		panic("Could not allocate memory for swsusp_header\n");
 	return 0;
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index edb7da4..b2aed2a 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -2077,7 +2077,7 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table,
 
 		if (left > PAGE_SIZE - 1)
 			left = PAGE_SIZE - 1;
-		kbuf = (char *)__get_free_page(GFP_TEMPORARY);
+		kbuf = get_free_page(GFP_TEMPORARY);
 		if (!kbuf)
 			return -ENOMEM;
 		if (copy_from_user(kbuf, buffer, left)) {
@@ -2337,7 +2337,7 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int
 
 		if (left > PAGE_SIZE - 1)
 			left = PAGE_SIZE - 1;
-		kbuf = (char *)__get_free_page(GFP_TEMPORARY);
+		kbuf = get_free_page(GFP_TEMPORARY);
 		if (!kbuf)
 			return -ENOMEM;
 		if (copy_from_user(kbuf, buffer, left)) {
@@ -2646,7 +2646,7 @@ int proc_do_large_bitmap(struct ctl_table *table, int write,
 	}
 
 	if (write) {
-		char *kbuf = (char *)__get_free_page(GFP_TEMPORARY);
+		char *kbuf = get_free_page(GFP_TEMPORARY);
 		if (!kbuf)
 			return -ENOMEM;
 
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 0a0a08e..d32df68 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -1340,7 +1340,7 @@ event_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
 	if (cnt >= PAGE_SIZE)
 		return -EINVAL;
 
-	buf = (char *)__get_free_page(GFP_TEMPORARY);
+	buf = get_free_page(GFP_TEMPORARY);
 	if (!buf)
 		return -ENOMEM;
 
@@ -1507,7 +1507,7 @@ subsystem_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
 	if (cnt >= PAGE_SIZE)
 		return -EINVAL;
 
-	buf = (char *)__get_free_page(GFP_TEMPORARY);
+	buf = get_free_page(GFP_TEMPORARY);
 	if (!buf)
 		return -ENOMEM;
 
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index 234b5b9e..3889fce 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -671,7 +671,7 @@ static void append_filter_err(struct filter_parse_state *ps,
 	int pos = ps->lasterr_pos;
 	char *buf, *pbuf;
 
-	buf = (char *)__get_free_page(GFP_TEMPORARY);
+	buf = get_free_page(GFP_TEMPORARY);
 	if (!buf)
 		return;
 
diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c
index 0796e61..af6c31d 100644
--- a/kernel/trace/trace_events_trigger.c
+++ b/kernel/trace/trace_events_trigger.c
@@ -237,7 +237,7 @@ static ssize_t event_trigger_regex_write(struct file *file,
 	if (cnt >= PAGE_SIZE)
 		return -EINVAL;
 
-	buf = (char *)__get_free_page(GFP_TEMPORARY);
+	buf = get_free_page(GFP_TEMPORARY);
 	if (!buf)
 		return -ENOMEM;
 
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
index badce97..57eb85f0 100644
--- a/kernel/user_namespace.c
+++ b/kernel/user_namespace.c
@@ -639,7 +639,7 @@ static ssize_t map_write(struct file *file, const char __user *buf,
 
 	/* Get a buffer */
 	ret = -ENOMEM;
-	kbuf = (char *)__get_free_page(GFP_TEMPORARY);
+	kbuf = get_free_page(GFP_TEMPORARY);
 	if (!kbuf)
 		goto out;
 
diff --git a/lib/scatterlist.c b/lib/scatterlist.c
index 6f44c3e..0752e7a 100644
--- a/lib/scatterlist.c
+++ b/lib/scatterlist.c
@@ -173,7 +173,7 @@ static struct scatterlist *sg_kmalloc(unsigned int nents, gfp_t gfp_mask)
 		 * false-positive) we need to inform kmemleak of all the
 		 * intermediate allocations.
 		 */
-		void *ptr = (void *) __get_free_page(gfp_mask);
+		void *ptr = get_free_page(gfp_mask);
 		kmemleak_alloc(ptr, PAGE_SIZE, 1, gfp_mask);
 		return ptr;
 	} else
diff --git a/mm/memory.c b/mm/memory.c
index a3c4440..8e4b375 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -371,7 +371,7 @@ void tlb_remove_table(struct mmu_gather *tlb, void *table)
 	}
 
 	if (*batch == NULL) {
-		*batch = (struct mmu_table_batch *)__get_free_page(GFP_NOWAIT | __GFP_NOWARN);
+		*batch = get_free_page(GFP_NOWAIT | __GFP_NOWARN);
 		if (*batch == NULL) {
 			tlb_remove_table_one(table);
 			return;
@@ -3762,7 +3762,7 @@ void print_vma_addr(char *prefix, unsigned long ip)
 	vma = find_vma(mm, ip);
 	if (vma && vma->vm_file) {
 		struct file *f = vma->vm_file;
-		char *buf = (char *)__get_free_page(GFP_KERNEL);
+		char *buf = get_free_page(GFP_KERNEL);
 		if (buf) {
 			char *p;
 
diff --git a/mm/migrate.c b/mm/migrate.c
index 7aeba9a..f9c2d38 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -1323,7 +1323,7 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes,
 	int err;
 
 	err = -ENOMEM;
-	pm = (struct page_to_node *)__get_free_page(GFP_KERNEL);
+	pm = get_free_page(GFP_KERNEL);
 	if (!pm)
 		goto out;
 
diff --git a/mm/mincore.c b/mm/mincore.c
index 077ef0e..a6a19db 100644
--- a/mm/mincore.c
+++ b/mm/mincore.c
@@ -239,7 +239,7 @@ SYSCALL_DEFINE3(mincore, unsigned long, start, size_t, len,
 	if (!access_ok(VERIFY_WRITE, vec, pages))
 		return -EFAULT;
 
-	tmp = (void *) __get_free_page(GFP_USER);
+	tmp = get_free_page(GFP_USER);
 	if (!tmp)
 		return -EAGAIN;
 
diff --git a/net/atm/mpoa_proc.c b/net/atm/mpoa_proc.c
index a2721ae..45d20cb 100644
--- a/net/atm/mpoa_proc.c
+++ b/net/atm/mpoa_proc.c
@@ -215,7 +215,7 @@ static ssize_t proc_mpc_write(struct file *file, const char __user *buff,
 	if (nbytes >= PAGE_SIZE)
 		nbytes = PAGE_SIZE-1;
 
-	page = (char *)__get_free_page(GFP_KERNEL);
+	page = get_free_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index dba9f5f..e539d0d 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -1258,7 +1258,7 @@ static int selinux_genfs_get_sid(struct dentry *dentry,
 	struct super_block *sb = dentry->d_inode->i_sb;
 	char *buffer, *path;
 
-	buffer = (char *)__get_free_page(GFP_KERNEL);
+	buffer = get_free_page(GFP_KERNEL);
 	if (!buffer)
 		return -ENOMEM;
 
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
index c4de69b..563ba88 100644
--- a/security/selinux/selinuxfs.c
+++ b/security/selinux/selinuxfs.c
@@ -1336,7 +1336,7 @@ static ssize_t sel_read_avc_hash_stats(struct file *filp, char __user *buf,
 	char *page;
 	ssize_t length;
 
-	page = (char *)__get_free_page(GFP_KERNEL);
+	page = get_free_page(GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 
diff --git a/sound/oss/msnd_pinnacle.c b/sound/oss/msnd_pinnacle.c
index 8aa54fc..8ce2399 100644
--- a/sound/oss/msnd_pinnacle.c
+++ b/sound/oss/msnd_pinnacle.c
@@ -899,7 +899,7 @@ static __inline__ int pack_DAPF_to_DAPQ(register int start)
 static int dsp_read(char __user *buf, size_t len)
 {
 	int count = len;
-	char *page = (char *)__get_free_page(GFP_KERNEL);
+	char *page = get_free_page(GFP_KERNEL);
 	int timeout = get_rec_delay_jiffies(DAR_BUFF_SIZE);
 
 	if (!page)
@@ -958,7 +958,7 @@ static int dsp_read(char __user *buf, size_t len)
 static int dsp_write(const char __user *buf, size_t len)
 {
 	int count = len;
-	char *page = (char *)__get_free_page(GFP_KERNEL);
+	char *page = get_free_page(GFP_KERNEL);
 	int timeout = get_play_delay_jiffies(DAP_BUFF_SIZE);
 
 	if (!page)
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 62/83] m68k: switch pte_alloc_one_kernel() to get_free_page()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (60 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 61/83] switch obvious cases to get_free_page() Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 63/83] switch kvmppc_core_vcpu_create_pr() " Al Viro
                   ` (21 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/m68k/include/asm/mcf_pgalloc.h  | 6 +++---
 arch/m68k/include/asm/sun3_pgalloc.h | 6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/arch/m68k/include/asm/mcf_pgalloc.h b/arch/m68k/include/asm/mcf_pgalloc.h
index 04ffc22..e08cac3 100644
--- a/arch/m68k/include/asm/mcf_pgalloc.h
+++ b/arch/m68k/include/asm/mcf_pgalloc.h
@@ -14,13 +14,13 @@ extern const char bad_pmd_string[];
 extern inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 	unsigned long address)
 {
-	unsigned long page = __get_free_page(GFP_DMA|__GFP_REPEAT);
+	pte_t *page = get_free_page(GFP_DMA|__GFP_REPEAT);
 
 	if (!page)
 		return NULL;
 
-	memset((void *)page, 0, PAGE_SIZE);
-	return (pte_t *) (page);
+	memset(page, 0, PAGE_SIZE);
+	return page;
 }
 
 extern inline pmd_t *pmd_alloc_kernel(pgd_t *pgd, unsigned long address)
diff --git a/arch/m68k/include/asm/sun3_pgalloc.h b/arch/m68k/include/asm/sun3_pgalloc.h
index ab0fd5c..9140b29 100644
--- a/arch/m68k/include/asm/sun3_pgalloc.h
+++ b/arch/m68k/include/asm/sun3_pgalloc.h
@@ -37,13 +37,13 @@ do {							\
 static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 					  unsigned long address)
 {
-	unsigned long page = __get_free_page(GFP_KERNEL|__GFP_REPEAT);
+	pte_t *page = get_free_page(GFP_KERNEL|__GFP_REPEAT);
 
 	if (!page)
 		return NULL;
 
-	memset((void *)page, 0, PAGE_SIZE);
-	return (pte_t *) (page);
+	memset(page, 0, PAGE_SIZE);
+	return page;
 }
 
 static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 63/83] switch kvmppc_core_vcpu_create_pr() to get_free_page()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (61 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 62/83] m68k: switch pte_alloc_one_kernel() " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 64/83] drivers/video/fbdev: switch to get_free_pages() Al Viro
                   ` (20 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/powerpc/kvm/book3s_pr.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c
index 3775664..9bdf9e3 100644
--- a/arch/powerpc/kvm/book3s_pr.c
+++ b/arch/powerpc/kvm/book3s_pr.c
@@ -1375,7 +1375,7 @@ static struct kvm_vcpu *kvmppc_core_vcpu_create_pr(struct kvm *kvm,
 	struct kvmppc_vcpu_book3s *vcpu_book3s;
 	struct kvm_vcpu *vcpu;
 	int err = -ENOMEM;
-	unsigned long p;
+	void *p;
 
 	vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL);
 	if (!vcpu)
@@ -1398,10 +1398,10 @@ static struct kvm_vcpu *kvmppc_core_vcpu_create_pr(struct kvm *kvm,
 		goto free_shadow_vcpu;
 
 	err = -ENOMEM;
-	p = __get_free_page(GFP_KERNEL|__GFP_ZERO);
+	p = get_free_page(GFP_KERNEL|__GFP_ZERO);
 	if (!p)
 		goto uninit_vcpu;
-	vcpu->arch.shared = (void *)p;
+	vcpu->arch.shared = p;
 #ifdef CONFIG_PPC_BOOK3S_64
 	/* Always start the shared struct in native endian mode */
 #ifdef __BIG_ENDIAN__
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 64/83] drivers/video/fbdev: switch to get_free_pages()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (62 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 63/83] switch kvmppc_core_vcpu_create_pr() " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 65/83] um: switch to get_free_page() Al Viro
                   ` (19 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/video/fbdev/grvga.c               | 20 +++++++++-----------
 drivers/video/fbdev/vermilion/vermilion.c | 17 ++++++++---------
 drivers/video/fbdev/vermilion/vermilion.h |  2 +-
 3 files changed, 18 insertions(+), 21 deletions(-)

diff --git a/drivers/video/fbdev/grvga.c b/drivers/video/fbdev/grvga.c
index b471f92..28fd657 100644
--- a/drivers/video/fbdev/grvga.c
+++ b/drivers/video/fbdev/grvga.c
@@ -333,7 +333,7 @@ static int grvga_probe(struct platform_device *dev)
 {
 	struct fb_info *info;
 	int retval = -ENOMEM;
-	unsigned long virtual_start;
+	void *virtual_start;
 	unsigned long grvga_fix_addr = 0;
 	unsigned long physical_start = 0;
 	unsigned long grvga_mem_size = 0;
@@ -435,8 +435,7 @@ static int grvga_probe(struct platform_device *dev)
 			goto dealloc_cmap;
 		}
 
-		virtual_start = (unsigned long) ioremap(physical_start, grvga_mem_size);
-
+		virtual_start = ioremap(physical_start, grvga_mem_size);
 		if (!virtual_start) {
 			dev_err(&dev->dev, "error mapping framebuffer memory\n");
 			retval = -ENOMEM;
@@ -444,10 +443,9 @@ static int grvga_probe(struct platform_device *dev)
 		}
 	} else {	/* Allocate frambuffer memory */
 
-		unsigned long page;
+		void *page;
 
-		virtual_start = (unsigned long) __get_free_pages(GFP_DMA,
-								 get_order(grvga_mem_size));
+		virtual_start = get_free_pages(GFP_DMA, get_order(grvga_mem_size));
 		if (!virtual_start) {
 			dev_err(&dev->dev,
 				"unable to allocate framebuffer memory (%lu bytes)\n",
@@ -456,13 +454,13 @@ static int grvga_probe(struct platform_device *dev)
 			goto dealloc_cmap;
 		}
 
-		physical_start = dma_map_single(&dev->dev, (void *)virtual_start, grvga_mem_size, DMA_TO_DEVICE);
+		physical_start = dma_map_single(&dev->dev, virtual_start, grvga_mem_size, DMA_TO_DEVICE);
 
 		/* Set page reserved so that mmap will work. This is necessary
 		 * since we'll be remapping normal memory.
 		 */
 		for (page = virtual_start;
-		     page < PAGE_ALIGN(virtual_start + grvga_mem_size);
+		     page < virtual_start + ALIGN(grvga_mem_size, PAGE_SIZE);
 		     page += PAGE_SIZE) {
 			SetPageReserved(virt_to_page(page));
 		}
@@ -470,7 +468,7 @@ static int grvga_probe(struct platform_device *dev)
 		par->fb_alloced = 1;
 	}
 
-	memset((unsigned long *) virtual_start, 0, grvga_mem_size);
+	memset(virtual_start, 0, grvga_mem_size);
 
 	info->screen_base = (char __iomem *) virtual_start;
 	info->fix.smem_start = physical_start;
@@ -497,9 +495,9 @@ static int grvga_probe(struct platform_device *dev)
 
 free_mem:
 	if (grvga_fix_addr)
-		iounmap((void *)virtual_start);
+		iounmap(virtual_start);
 	else
-		kfree((void *)virtual_start);
+		kfree(virtual_start);
 dealloc_cmap:
 	fb_dealloc_cmap(&info->cmap);
 unmap_regs:
diff --git a/drivers/video/fbdev/vermilion/vermilion.c b/drivers/video/fbdev/vermilion/vermilion.c
index 0882f41..4e9e02f 100644
--- a/drivers/video/fbdev/vermilion/vermilion.c
+++ b/drivers/video/fbdev/vermilion/vermilion.c
@@ -88,7 +88,7 @@ static int vmlfb_alloc_vram_area(struct vram_area *va, unsigned max_order,
 				 unsigned min_order)
 {
 	gfp_t flags;
-	unsigned long i;
+	void *i;
 
 	max_order++;
 	do {
@@ -100,14 +100,13 @@ static int vmlfb_alloc_vram_area(struct vram_area *va, unsigned max_order,
 		 */
 
 		flags = __GFP_DMA | __GFP_HIGH | __GFP_KSWAPD_RECLAIM;
-		va->logical =
-			 __get_free_pages(flags, --max_order);
-	} while (va->logical == 0 && max_order > min_order);
+		va->logical = get_free_pages(flags, --max_order);
+	} while (va->logical == NULL && max_order > min_order);
 
 	if (!va->logical)
 		return -ENOMEM;
 
-	va->phys = virt_to_phys((void *)va->logical);
+	va->phys = virt_to_phys(va->logical);
 	va->size = PAGE_SIZE << max_order;
 	va->order = max_order;
 
@@ -118,7 +117,7 @@ static int vmlfb_alloc_vram_area(struct vram_area *va, unsigned max_order,
 	 * compound page).
 	 */
 
-	memset((void *)va->logical, 0x00, va->size);
+	memset(va->logical, 0x00, va->size);
 	for (i = va->logical; i < va->logical + va->size; i += PAGE_SIZE) {
 		get_page(virt_to_page(i));
 	}
@@ -143,7 +142,7 @@ static int vmlfb_alloc_vram_area(struct vram_area *va, unsigned max_order,
 
 static void vmlfb_free_vram_area(struct vram_area *va)
 {
-	unsigned long j;
+	void *j;
 
 	if (va->logical) {
 
@@ -167,9 +166,9 @@ static void vmlfb_free_vram_area(struct vram_area *va)
 		printk(KERN_DEBUG MODULE_NAME
 		       ": Freeing %ld bytes vram area at 0x%08lx\n",
 		       va->size, va->phys);
-		free_pages((void *)va->logical, va->order);
+		free_pages(va->logical, va->order);
 
-		va->logical = 0;
+		va->logical = NULL;
 	}
 }
 
diff --git a/drivers/video/fbdev/vermilion/vermilion.h b/drivers/video/fbdev/vermilion/vermilion.h
index 43d11ec..65f1a63 100644
--- a/drivers/video/fbdev/vermilion/vermilion.h
+++ b/drivers/video/fbdev/vermilion/vermilion.h
@@ -203,7 +203,7 @@ struct vml_par {
 };
 
 struct vram_area {
-	unsigned long logical;
+	void *logical;
 	unsigned long phys;
 	unsigned long size;
 	unsigned order;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 65/83] um: switch to get_free_page()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (63 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 64/83] drivers/video/fbdev: switch to get_free_pages() Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 66/83] switch xen_get_swiotlb_free_pages() to returning a pointer Al Viro
                   ` (18 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/x86/um/ldt.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/arch/x86/um/ldt.c b/arch/x86/um/ldt.c
index 60b4314..a3c5104 100644
--- a/arch/x86/um/ldt.c
+++ b/arch/x86/um/ldt.c
@@ -297,7 +297,7 @@ long init_new_ldt(struct mm_context *new_mm, struct mm_context *from_mm)
 	struct user_desc desc;
 	short * num_p;
 	int i;
-	long page, err=0;
+	long err=0;
 	void *addr = NULL;
 
 
@@ -336,13 +336,12 @@ long init_new_ldt(struct mm_context *new_mm, struct mm_context *from_mm)
 	else {
 		i = from_mm->arch.ldt.entry_count / LDT_ENTRIES_PER_PAGE;
 		while (i-->0) {
-			page = __get_free_page(GFP_KERNEL|__GFP_ZERO);
+			void *page = get_free_page(GFP_KERNEL|__GFP_ZERO);
 			if (!page) {
 				err = -ENOMEM;
 				break;
 			}
-			new_mm->arch.ldt.u.pages[i] =
-				(struct ldt_entry *) page;
+			new_mm->arch.ldt.u.pages[i] = page;
 			memcpy(new_mm->arch.ldt.u.pages[i],
 			       from_mm->arch.ldt.u.pages[i], PAGE_SIZE);
 		}
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 66/83] switch xen_get_swiotlb_free_pages() to returning a pointer
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (64 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 65/83] um: switch to get_free_page() Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 67/83] mn10300 dma_alloc_coherent(): switch to get_free_pages() Al Viro
                   ` (17 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/arm/include/asm/xen/page.h | 2 +-
 arch/arm/xen/mm.c               | 4 ++--
 arch/x86/include/asm/xen/page.h | 4 ++--
 drivers/xen/swiotlb-xen.c       | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/arch/arm/include/asm/xen/page.h b/arch/arm/include/asm/xen/page.h
index 415dbc6..79f92d4 100644
--- a/arch/arm/include/asm/xen/page.h
+++ b/arch/arm/include/asm/xen/page.h
@@ -117,6 +117,6 @@ static inline bool set_phys_to_machine(unsigned long pfn, unsigned long mfn)
 bool xen_arch_need_swiotlb(struct device *dev,
 			   phys_addr_t phys,
 			   dma_addr_t dev_addr);
-unsigned long xen_get_swiotlb_free_pages(unsigned int order);
+void *xen_get_swiotlb_free_pages(unsigned int order);
 
 #endif /* _ASM_ARM_XEN_PAGE_H */
diff --git a/arch/arm/xen/mm.c b/arch/arm/xen/mm.c
index c5f9a9e..9677c56 100644
--- a/arch/arm/xen/mm.c
+++ b/arch/arm/xen/mm.c
@@ -22,7 +22,7 @@
 #include <asm/xen/hypercall.h>
 #include <asm/xen/interface.h>
 
-unsigned long xen_get_swiotlb_free_pages(unsigned int order)
+void *xen_get_swiotlb_free_pages(unsigned int order)
 {
 	struct memblock_region *reg;
 	gfp_t flags = __GFP_NOWARN|__GFP_KSWAPD_RECLAIM;
@@ -33,7 +33,7 @@ unsigned long xen_get_swiotlb_free_pages(unsigned int order)
 			break;
 		}
 	}
-	return __get_free_pages(flags, order);
+	return get_free_pages(flags, order);
 }
 
 enum dma_cache_op {
diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h
index f5fb840..89d7a44 100644
--- a/arch/x86/include/asm/xen/page.h
+++ b/arch/x86/include/asm/xen/page.h
@@ -304,9 +304,9 @@ static inline bool xen_arch_need_swiotlb(struct device *dev,
 	return false;
 }
 
-static inline unsigned long xen_get_swiotlb_free_pages(unsigned int order)
+static inline void *xen_get_swiotlb_free_pages(unsigned int order)
 {
-	return __get_free_pages(__GFP_NOWARN, order);
+	return get_free_pages(__GFP_NOWARN, order);
 }
 
 #endif /* _ASM_X86_XEN_PAGE_H */
diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index fa6b56e..952255f 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -234,7 +234,7 @@ retry:
 #define SLABS_PER_PAGE (1 << (PAGE_SHIFT - IO_TLB_SHIFT))
 #define IO_TLB_MIN_SLABS ((1<<20) >> IO_TLB_SHIFT)
 		while ((SLABS_PER_PAGE << order) > IO_TLB_MIN_SLABS) {
-			xen_io_tlb_start = (void *)xen_get_swiotlb_free_pages(order);
+			xen_io_tlb_start = xen_get_swiotlb_free_pages(order);
 			if (xen_io_tlb_start)
 				break;
 			order--;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 67/83] mn10300 dma_alloc_coherent(): switch to get_free_pages()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (65 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 66/83] switch xen_get_swiotlb_free_pages() to returning a pointer Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 68/83] switch ps3_dma_map() and ps3_dma_region_ops->map() instances to physical address Al Viro
                   ` (16 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/mn10300/mm/dma-alloc.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/arch/mn10300/mm/dma-alloc.c b/arch/mn10300/mm/dma-alloc.c
index 5f3132a4..ffcf771 100644
--- a/arch/mn10300/mm/dma-alloc.c
+++ b/arch/mn10300/mm/dma-alloc.c
@@ -23,17 +23,16 @@ static unsigned long pci_sram_allocated = 0xbc000000;
 void *dma_alloc_coherent(struct device *dev, size_t size,
 			 dma_addr_t *dma_handle, int gfp)
 {
-	unsigned long addr;
-	void *ret;
+	void *addr, *ret;
 
 	pr_debug("dma_alloc_coherent(%s,%zu,%x)\n",
 		 dev ? dev_name(dev) : "?", size, gfp);
 
 	if (0xbe000000 - pci_sram_allocated >= size) {
 		size = (size + 255) & ~255;
-		addr = pci_sram_allocated;
+		addr = (void *)pci_sram_allocated;
 		pci_sram_allocated += size;
-		ret = (void *) addr;
+		ret = addr;
 		goto done;
 	}
 
@@ -43,21 +42,21 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
 	if (dev == NULL || dev->coherent_dma_mask < 0xffffffff)
 		gfp |= GFP_DMA;
 
-	addr = __get_free_pages(gfp, get_order(size));
+	addr = get_free_pages(gfp, get_order(size));
 	if (!addr)
 		return NULL;
 
 	/* map the coherent memory through the uncached memory window */
-	ret = (void *) (addr | 0x20000000);
+	ret = (void *) ((unsigned long)addr | 0x20000000);
 
 	/* fill the memory with obvious rubbish */
-	memset((void *) addr, 0xfb, size);
+	memset(addr, 0xfb, size);
 
 	/* write back and evict all cache lines covering this region */
-	mn10300_dcache_flush_inv_range2(virt_to_phys((void *) addr), PAGE_SIZE);
+	mn10300_dcache_flush_inv_range2(virt_to_phys(addr), PAGE_SIZE);
 
 done:
-	*dma_handle = virt_to_bus((void *) addr);
+	*dma_handle = virt_to_bus(addr);
 	printk("dma_alloc_coherent() = %p [%x]\n", ret, *dma_handle);
 	return ret;
 }
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 68/83] switch ps3_dma_map() and ps3_dma_region_ops->map() instances to physical address
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (66 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 67/83] mn10300 dma_alloc_coherent(): switch to get_free_pages() Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 69/83] ps3_alloc_coherent(): get rid of pointless casts Al Viro
                   ` (15 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

callers know whether they are passing a virtual address or a physical one;
seeing that all work in the instances is done with physical addresses,
might as well have all callers pass those and don't bother with instances
checking whether they'd got a physical or a virtual address.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/powerpc/include/asm/ps3.h          |  4 ++--
 arch/powerpc/platforms/ps3/mm.c         | 34 ++++++++++++---------------------
 arch/powerpc/platforms/ps3/system-bus.c |  6 +++---
 3 files changed, 17 insertions(+), 27 deletions(-)

diff --git a/arch/powerpc/include/asm/ps3.h b/arch/powerpc/include/asm/ps3.h
index a1bc7e7..ec12e0ba 100644
--- a/arch/powerpc/include/asm/ps3.h
+++ b/arch/powerpc/include/asm/ps3.h
@@ -110,7 +110,7 @@ struct ps3_dma_region_ops {
 	int (*create)(struct ps3_dma_region *);
 	int (*free)(struct ps3_dma_region *);
 	int (*map)(struct ps3_dma_region *,
-		   unsigned long virt_addr,
+		   unsigned long phys_addr,
 		   unsigned long len,
 		   dma_addr_t *bus_addr,
 		   u64 iopte_pp);
@@ -132,7 +132,7 @@ int ps3_dma_region_init(struct ps3_system_bus_device *dev,
 	enum ps3_dma_region_type region_type, void *addr, unsigned long len);
 int ps3_dma_region_create(struct ps3_dma_region *r);
 int ps3_dma_region_free(struct ps3_dma_region *r);
-int ps3_dma_map(struct ps3_dma_region *r, unsigned long virt_addr,
+int ps3_dma_map(struct ps3_dma_region *r, unsigned long phys_addr,
 	unsigned long len, dma_addr_t *bus_addr,
 	u64 iopte_pp);
 int ps3_dma_unmap(struct ps3_dma_region *r, dma_addr_t bus_addr,
diff --git a/arch/powerpc/platforms/ps3/mm.c b/arch/powerpc/platforms/ps3/mm.c
index b0f3466..6cc3007 100644
--- a/arch/powerpc/platforms/ps3/mm.c
+++ b/arch/powerpc/platforms/ps3/mm.c
@@ -772,7 +772,7 @@ static int dma_ioc0_region_free(struct ps3_dma_region *r)
 /**
  * dma_sb_map_area - Map an area of memory into a device dma region.
  * @r: Pointer to a struct ps3_dma_region.
- * @virt_addr: Starting virtual address of the area to map.
+ * @phys_addr: Starting virtual address of the area to map.
  * @len: Length in bytes of the area to map.
  * @bus_addr: A pointer to return the starting ioc bus address of the area to
  * map.
@@ -780,15 +780,13 @@ static int dma_ioc0_region_free(struct ps3_dma_region *r)
  * This is the common dma mapping routine.
  */
 
-static int dma_sb_map_area(struct ps3_dma_region *r, unsigned long virt_addr,
+static int dma_sb_map_area(struct ps3_dma_region *r, unsigned long phys_addr,
 	   unsigned long len, dma_addr_t *bus_addr,
 	   u64 iopte_flag)
 {
 	int result;
 	unsigned long flags;
 	struct dma_chunk *c;
-	unsigned long phys_addr = is_kernel_addr(virt_addr) ? __pa(virt_addr)
-		: virt_addr;
 	unsigned long aligned_phys = _ALIGN_DOWN(phys_addr, 1 << r->page_size);
 	unsigned long aligned_len = _ALIGN_UP(len + phys_addr - aligned_phys,
 					      1 << r->page_size);
@@ -797,8 +795,6 @@ static int dma_sb_map_area(struct ps3_dma_region *r, unsigned long virt_addr,
 	if (!USE_DYNAMIC_DMA) {
 		unsigned long lpar_addr = ps3_mm_phys_to_lpar(phys_addr);
 		DBG(" -> %s:%d\n", __func__, __LINE__);
-		DBG("%s:%d virt_addr %lxh\n", __func__, __LINE__,
-			virt_addr);
 		DBG("%s:%d phys_addr %lxh\n", __func__, __LINE__,
 			phys_addr);
 		DBG("%s:%d lpar_addr %lxh\n", __func__, __LINE__,
@@ -835,23 +831,19 @@ static int dma_sb_map_area(struct ps3_dma_region *r, unsigned long virt_addr,
 	return result;
 }
 
-static int dma_ioc0_map_area(struct ps3_dma_region *r, unsigned long virt_addr,
+static int dma_ioc0_map_area(struct ps3_dma_region *r, unsigned long phys_addr,
 	     unsigned long len, dma_addr_t *bus_addr,
 	     u64 iopte_flag)
 {
 	int result;
 	unsigned long flags;
 	struct dma_chunk *c;
-	unsigned long phys_addr = is_kernel_addr(virt_addr) ? __pa(virt_addr)
-		: virt_addr;
 	unsigned long aligned_phys = _ALIGN_DOWN(phys_addr, 1 << r->page_size);
 	unsigned long aligned_len = _ALIGN_UP(len + phys_addr - aligned_phys,
 					      1 << r->page_size);
 
-	DBG(KERN_ERR "%s: vaddr=%#lx, len=%#lx\n", __func__,
-	    virt_addr, len);
-	DBG(KERN_ERR "%s: ph=%#lx a_ph=%#lx a_l=%#lx\n", __func__,
-	    phys_addr, aligned_phys, aligned_len);
+	DBG(KERN_ERR "%s: ph=%#lx len=%#lx a_ph=%#lx a_l=%#lx\n", __func__,
+	    phys_addr, len, aligned_phys, aligned_len);
 
 	spin_lock_irqsave(&r->chunk_list.lock, flags);
 	c = dma_find_chunk_lpar(r, ps3_mm_phys_to_lpar(phys_addr), len);
@@ -876,8 +868,8 @@ static int dma_ioc0_map_area(struct ps3_dma_region *r, unsigned long virt_addr,
 		return result;
 	}
 	*bus_addr = c->bus_addr + phys_addr - aligned_phys;
-	DBG("%s: va=%#lx pa=%#lx a_pa=%#lx bus=%#llx\n", __func__,
-	    virt_addr, phys_addr, aligned_phys, *bus_addr);
+	DBG("%s: pa=%#lx a_pa=%#lx bus=%#llx\n", __func__,
+	    phys_addr, aligned_phys, *bus_addr);
 	c->usage_count = 1;
 
 	spin_unlock_irqrestore(&r->chunk_list.lock, flags);
@@ -1001,7 +993,7 @@ static int dma_sb_region_create_linear(struct ps3_dma_region *r)
 		len = map.rm.size - r->offset;
 		if (len > r->len)
 			len = r->len;
-		result = dma_sb_map_area(r, virt_addr, len, &tmp,
+		result = dma_sb_map_area(r, __pa(virt_addr), len, &tmp,
 			CBE_IOPTE_PP_W | CBE_IOPTE_PP_R | CBE_IOPTE_SO_RW |
 			CBE_IOPTE_M);
 		BUG_ON(result);
@@ -1015,7 +1007,7 @@ static int dma_sb_region_create_linear(struct ps3_dma_region *r)
 			virt_addr += r->offset - map.rm.size;
 		else
 			len -= map.rm.size - r->offset;
-		result = dma_sb_map_area(r, virt_addr, len, &tmp,
+		result = dma_sb_map_area(r, __pa(virt_addr), len, &tmp,
 			CBE_IOPTE_PP_W | CBE_IOPTE_PP_R | CBE_IOPTE_SO_RW |
 			CBE_IOPTE_M);
 		BUG_ON(result);
@@ -1080,11 +1072,9 @@ static int dma_sb_region_free_linear(struct ps3_dma_region *r)
  */
 
 static int dma_sb_map_area_linear(struct ps3_dma_region *r,
-	unsigned long virt_addr, unsigned long len, dma_addr_t *bus_addr,
+	unsigned long phys_addr, unsigned long len, dma_addr_t *bus_addr,
 	u64 iopte_flag)
 {
-	unsigned long phys_addr = is_kernel_addr(virt_addr) ? __pa(virt_addr)
-		: virt_addr;
 	*bus_addr = dma_sb_lpar_to_bus(r, ps3_mm_phys_to_lpar(phys_addr));
 	return 0;
 }
@@ -1176,11 +1166,11 @@ int ps3_dma_region_free(struct ps3_dma_region *r)
 }
 EXPORT_SYMBOL(ps3_dma_region_free);
 
-int ps3_dma_map(struct ps3_dma_region *r, unsigned long virt_addr,
+int ps3_dma_map(struct ps3_dma_region *r, unsigned long phys_addr,
 	unsigned long len, dma_addr_t *bus_addr,
 	u64 iopte_flag)
 {
-	return r->region_ops->map(r, virt_addr, len, bus_addr, iopte_flag);
+	return r->region_ops->map(r, phys_addr, len, bus_addr, iopte_flag);
 }
 
 int ps3_dma_unmap(struct ps3_dma_region *r, dma_addr_t bus_addr,
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index 001b93c..988f8eb 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -532,7 +532,7 @@ static void * ps3_alloc_coherent(struct device *_dev, size_t size,
 		goto clean_none;
 	}
 
-	result = ps3_dma_map(dev->d_region, virt_addr, size, dma_handle,
+	result = ps3_dma_map(dev->d_region, __pa(virt_addr), size, dma_handle,
 			     CBE_IOPTE_PP_W | CBE_IOPTE_PP_R |
 			     CBE_IOPTE_SO_RW | CBE_IOPTE_M);
 
@@ -576,7 +576,7 @@ static dma_addr_t ps3_sb_map_page(struct device *_dev, struct page *page,
 	dma_addr_t bus_addr;
 	void *ptr = page_address(page) + offset;
 
-	result = ps3_dma_map(dev->d_region, (unsigned long)ptr, size,
+	result = ps3_dma_map(dev->d_region, __pa(ptr), size,
 			     &bus_addr,
 			     CBE_IOPTE_PP_R | CBE_IOPTE_PP_W |
 			     CBE_IOPTE_SO_RW | CBE_IOPTE_M);
@@ -615,7 +615,7 @@ static dma_addr_t ps3_ioc0_map_page(struct device *_dev, struct page *page,
 		/* not happned */
 		BUG();
 	};
-	result = ps3_dma_map(dev->d_region, (unsigned long)ptr, size,
+	result = ps3_dma_map(dev->d_region, __pa(ptr), size,
 			     &bus_addr, iopte_flag);
 
 	if (result) {
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 69/83] ps3_alloc_coherent(): get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (67 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 68/83] switch ps3_dma_map() and ps3_dma_region_ops->map() instances to physical address Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 70/83] s390_dma_alloc(): page_to_phys() result is always a multiple of PAGE_SIZE Al Viro
                   ` (14 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/powerpc/platforms/ps3/system-bus.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index 988f8eb..bb358ab 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -520,12 +520,12 @@ static void * ps3_alloc_coherent(struct device *_dev, size_t size,
 {
 	int result;
 	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
-	unsigned long virt_addr;
+	void *virt_addr;
 
 	flag &= ~(__GFP_DMA | __GFP_HIGHMEM);
 	flag |= __GFP_ZERO;
 
-	virt_addr = __get_free_pages(flag, get_order(size));
+	virt_addr = get_free_pages(flag, get_order(size));
 
 	if (!virt_addr) {
 		pr_debug("%s:%d: get_free_pages failed\n", __func__, __LINE__);
@@ -543,10 +543,10 @@ static void * ps3_alloc_coherent(struct device *_dev, size_t size,
 		goto clean_alloc;
 	}
 
-	return (void*)virt_addr;
+	return virt_addr;
 
 clean_alloc:
-	free_pages((void *)virt_addr, get_order(size));
+	free_pages(virt_addr, get_order(size));
 clean_none:
 	dma_handle = NULL;
 	return NULL;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 70/83] s390_dma_alloc(): page_to_phys() result is always a multiple of PAGE_SIZE
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (68 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 69/83] ps3_alloc_coherent(): get rid of pointless casts Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 71/83] s390_dma_alloc(): use page_address() Al Viro
                   ` (13 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/s390/pci/pci_dma.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c
index 5a15471..afa4be1 100644
--- a/arch/s390/pci/pci_dma.c
+++ b/arch/s390/pci/pci_dma.c
@@ -366,7 +366,7 @@ static void *s390_dma_alloc(struct device *dev, size_t size,
 	pa = page_to_phys(page);
 	memset((void *) pa, 0, size);
 
-	map = s390_dma_map_pages(dev, page, pa % PAGE_SIZE,
+	map = s390_dma_map_pages(dev, page, 0,
 				 size, DMA_BIDIRECTIONAL, NULL);
 	if (dma_mapping_error(dev, map)) {
 		free_pages((void *)pa, get_order(size));
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 71/83] s390_dma_alloc(): use page_address()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (69 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 70/83] s390_dma_alloc(): page_to_phys() result is always a multiple of PAGE_SIZE Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 72/83] [powerpc] switch cmm_page_array->pages[] to pointers Al Viro
                   ` (12 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

... rather than open-coding it as (void *)page_to_phys() - those expand
to the same thing on s390 (no highmem and __va is an identity mapping),
but it's more readable (and less confusing) that way.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/s390/pci/pci_dma.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c
index afa4be1..6ea4d13 100644
--- a/arch/s390/pci/pci_dma.c
+++ b/arch/s390/pci/pci_dma.c
@@ -355,7 +355,7 @@ static void *s390_dma_alloc(struct device *dev, size_t size,
 {
 	struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
 	struct page *page;
-	unsigned long pa;
+	void *p;
 	dma_addr_t map;
 
 	size = PAGE_ALIGN(size);
@@ -363,20 +363,20 @@ static void *s390_dma_alloc(struct device *dev, size_t size,
 	if (!page)
 		return NULL;
 
-	pa = page_to_phys(page);
-	memset((void *) pa, 0, size);
+	p = page_address(page);
+	memset(p, 0, size);
 
 	map = s390_dma_map_pages(dev, page, 0,
 				 size, DMA_BIDIRECTIONAL, NULL);
 	if (dma_mapping_error(dev, map)) {
-		free_pages((void *)pa, get_order(size));
+		free_pages(p, get_order(size));
 		return NULL;
 	}
 
 	atomic64_add(size / PAGE_SIZE, &zdev->allocated_pages);
 	if (dma_handle)
 		*dma_handle = map;
-	return (void *) pa;
+	return p;
 }
 
 static void s390_dma_free(struct device *dev, size_t size,
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 72/83] [powerpc] switch cmm_page_array->pages[] to pointers
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (70 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 71/83] s390_dma_alloc(): use page_address() Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 73/83] niu.c: get rid of pointless casts Al Viro
                   ` (11 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/powerpc/platforms/pseries/cmm.c | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/cmm.c b/arch/powerpc/platforms/pseries/cmm.c
index f4aa67d..af628e4 100644
--- a/arch/powerpc/platforms/pseries/cmm.c
+++ b/arch/powerpc/platforms/pseries/cmm.c
@@ -94,7 +94,7 @@ MODULE_PARM_DESC(debug, "Enable module debugging logging. Set to 1 to enable. "
 struct cmm_page_array {
 	struct cmm_page_array *next;
 	unsigned long index;
-	unsigned long page[CMM_NR_PAGES];
+	void *page[CMM_NR_PAGES];
 };
 
 static unsigned long loaned_pages;
@@ -119,7 +119,7 @@ static struct task_struct *cmm_thread_ptr;
 static long cmm_alloc_pages(long nr)
 {
 	struct cmm_page_array *pa, *npa;
-	unsigned long addr;
+	void *addr;
 	long rc;
 
 	cmm_dbg("Begin request for %ld pages\n", nr);
@@ -136,7 +136,7 @@ static long cmm_alloc_pages(long nr)
 			break;
 		}
 
-		addr = __get_free_page(GFP_NOIO | __GFP_NOWARN |
+		addr = get_free_page(GFP_NOIO | __GFP_NOWARN |
 				       __GFP_NORETRY | __GFP_NOMEMALLOC);
 		if (!addr)
 			break;
@@ -149,7 +149,7 @@ static long cmm_alloc_pages(long nr)
 					__GFP_NORETRY | __GFP_NOMEMALLOC);
 			if (!npa) {
 				pr_info("%s: Can not allocate new page list\n", __func__);
-				free_page((void *)addr);
+				free_page(addr);
 				break;
 			}
 			spin_lock(&cmm_lock);
@@ -167,7 +167,7 @@ static long cmm_alloc_pages(long nr)
 		if ((rc = plpar_page_set_loaned(__pa(addr)))) {
 			pr_err("%s: Can not set page to loaned. rc=%ld\n", __func__, rc);
 			spin_unlock(&cmm_lock);
-			free_page((void *)addr);
+			free_page(addr);
 			break;
 		}
 
@@ -192,7 +192,7 @@ static long cmm_alloc_pages(long nr)
 static long cmm_free_pages(long nr)
 {
 	struct cmm_page_array *pa;
-	unsigned long addr;
+	void *addr;
 
 	cmm_dbg("Begin free of %ld pages.\n", nr);
 	spin_lock(&cmm_lock);
@@ -209,7 +209,7 @@ static long cmm_free_pages(long nr)
 		}
 
 		plpar_page_set_active(__pa(addr));
-		free_page((void *)addr);
+		free_page(addr);
 		loaned_pages--;
 		nr--;
 		totalram_pages++;
@@ -471,14 +471,14 @@ static unsigned long cmm_count_pages(void *arg)
 {
 	struct memory_isolate_notify *marg = arg;
 	struct cmm_page_array *pa;
-	unsigned long start = (unsigned long)pfn_to_kaddr(marg->start_pfn);
-	unsigned long end = start + (marg->nr_pages << PAGE_SHIFT);
+	void *start = pfn_to_kaddr(marg->start_pfn);
+	void *end = start + (marg->nr_pages << PAGE_SHIFT);
 	unsigned long idx;
 
 	spin_lock(&cmm_lock);
 	pa = cmm_page_list;
 	while (pa) {
-		if ((unsigned long)pa >= start && (unsigned long)pa < end)
+		if ((void *)pa >= start && (void *)pa < end)
 			marg->pages_found++;
 		for (idx = 0; idx < pa->index; idx++)
 			if (pa->page[idx] >= start && pa->page[idx] < end)
@@ -524,13 +524,13 @@ static struct notifier_block cmm_mem_isolate_nb = {
 static int cmm_mem_going_offline(void *arg)
 {
 	struct memory_notify *marg = arg;
-	unsigned long start_page = (unsigned long)pfn_to_kaddr(marg->start_pfn);
-	unsigned long end_page = start_page + (marg->nr_pages << PAGE_SHIFT);
+	void *start_page = pfn_to_kaddr(marg->start_pfn);
+	void *end_page = start_page + (marg->nr_pages << PAGE_SHIFT);
 	struct cmm_page_array *pa_curr, *pa_last, *npa;
 	unsigned long idx;
 	unsigned long freed = 0;
 
-	cmm_dbg("Memory going offline, searching 0x%lx (%ld pages).\n",
+	cmm_dbg("Memory going offline, searching 0x%p (%ld pages).\n",
 			start_page, marg->nr_pages);
 	spin_lock(&cmm_lock);
 
@@ -543,7 +543,7 @@ static int cmm_mem_going_offline(void *arg)
 				continue;
 
 			plpar_page_set_active(__pa(pa_curr->page[idx]));
-			free_page((void *)pa_curr->page[idx]);
+			free_page(pa_curr->page[idx]);
 			freed++;
 			loaned_pages--;
 			totalram_pages++;
@@ -563,8 +563,8 @@ static int cmm_mem_going_offline(void *arg)
 	pa_last = NULL;
 	pa_curr = cmm_page_list;
 	while (pa_curr) {
-		if (((unsigned long)pa_curr >= start_page) &&
-				((unsigned long)pa_curr < end_page)) {
+		if (((void *)pa_curr >= start_page) &&
+		    ((void *)pa_curr < end_page)) {
 			npa = get_free_page(GFP_NOIO | __GFP_NOWARN |
 					__GFP_NORETRY | __GFP_NOMEMALLOC);
 			if (!npa) {
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 73/83] niu.c: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (71 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 72/83] [powerpc] switch cmm_page_array->pages[] to pointers Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 74/83] [s390] switch pcpu_alloc_lowcore() to get_free_page() Al Viro
                   ` (10 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/net/ethernet/sun/niu.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
index 66ac0ffe..1716148 100644
--- a/drivers/net/ethernet/sun/niu.c
+++ b/drivers/net/ethernet/sun/niu.c
@@ -9959,14 +9959,14 @@ static void *niu_phys_alloc_coherent(struct device *dev, size_t size,
 				     u64 *dma_addr, gfp_t flag)
 {
 	unsigned long order = get_order(size);
-	unsigned long page = __get_free_pages(flag, order);
+	void *page = get_free_pages(flag, order);
 
 	if (page == 0UL)
 		return NULL;
-	memset((char *)page, 0, PAGE_SIZE << order);
+	memset(page, 0, PAGE_SIZE << order);
 	*dma_addr = __pa(page);
 
-	return (void *) page;
+	return page;
 }
 
 static void niu_phys_free_coherent(struct device *dev, size_t size,
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 74/83] [s390] switch pcpu_alloc_lowcore() to get_free_page()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (72 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 73/83] niu.c: get rid of pointless casts Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 75/83] kill __get_free_page() Al Viro
                   ` (9 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/s390/kernel/smp.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 34a5041..a32f727 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -179,24 +179,24 @@ static void pcpu_ec_call(struct pcpu *pcpu, int ec_bit)
 
 static int pcpu_alloc_lowcore(struct pcpu *pcpu, int cpu)
 {
-	unsigned long async_stack, panic_stack;
+	void *async_stack, *panic_stack;
 	struct _lowcore *lc;
 
 	if (pcpu != &pcpu_devices[0]) {
 		pcpu->lowcore =	get_free_pages(GFP_KERNEL | GFP_DMA, LC_ORDER);
-		async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER);
-		panic_stack = __get_free_page(GFP_KERNEL);
+		async_stack = get_free_pages(GFP_KERNEL, ASYNC_ORDER);
+		panic_stack = get_free_page(GFP_KERNEL);
 		if (!pcpu->lowcore || !panic_stack || !async_stack)
 			goto out;
 	} else {
-		async_stack = pcpu->lowcore->async_stack - ASYNC_FRAME_OFFSET;
-		panic_stack = pcpu->lowcore->panic_stack - PANIC_FRAME_OFFSET;
+		async_stack = (void *)(pcpu->lowcore->async_stack - ASYNC_FRAME_OFFSET);
+		panic_stack = (void *)(pcpu->lowcore->panic_stack - PANIC_FRAME_OFFSET);
 	}
 	lc = pcpu->lowcore;
 	memcpy(lc, &S390_lowcore, 512);
 	memset((char *) lc + 512, 0, sizeof(*lc) - 512);
-	lc->async_stack = async_stack + ASYNC_FRAME_OFFSET;
-	lc->panic_stack = panic_stack + PANIC_FRAME_OFFSET;
+	lc->async_stack = (u64)async_stack + ASYNC_FRAME_OFFSET;
+	lc->panic_stack = (u64)panic_stack + PANIC_FRAME_OFFSET;
 	lc->cpu_nr = cpu;
 	lc->spinlock_lockval = arch_spin_lockval(cpu);
 	if (MACHINE_HAS_VX)
@@ -209,8 +209,8 @@ static int pcpu_alloc_lowcore(struct pcpu *pcpu, int cpu)
 	return 0;
 out:
 	if (pcpu != &pcpu_devices[0]) {
-		free_page((void *)panic_stack);
-		free_pages((void *)async_stack, ASYNC_ORDER);
+		free_page(panic_stack);
+		free_pages(async_stack, ASYNC_ORDER);
 		free_pages(pcpu->lowcore, LC_ORDER);
 	}
 	return -ENOMEM;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 75/83] kill __get_free_page()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (73 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 74/83] [s390] switch pcpu_alloc_lowcore() to get_free_page() Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 76/83] [mips, s390, score] turn empty_zero_page into pointer Al Viro
                   ` (8 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/acpi/apei/ghes.c | 2 +-
 include/linux/gfp.h      | 3 ---
 2 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
index 1d074de..3c02819 100644
--- a/drivers/acpi/apei/ghes.c
+++ b/drivers/acpi/apei/ghes.c
@@ -223,7 +223,7 @@ static int ghes_estatus_pool_expand(unsigned long len)
 		return 0;
 	pages = (ghes_estatus_pool_size_request - size) / PAGE_SIZE;
 	for (i = 0; i < pages; i++) {
-		addr = __get_free_page(GFP_KERNEL);
+		addr = (unsigned long)get_free_page(GFP_KERNEL);
 		if (!addr)
 			return -ENOMEM;
 		ret = gen_pool_add(ghes_estatus_pool, addr, PAGE_SIZE, -1);
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index bb1626a..c929a04 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -485,9 +485,6 @@ void * __meminit alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask);
 #define get_free_page(gfp_mask) \
 		get_free_pages((gfp_mask), 0)
 
-#define __get_free_page(gfp_mask) \
-		__get_free_pages((gfp_mask), 0)
-
 #define get_dma_pages(gfp_mask, order) \
 		get_free_pages((gfp_mask) | GFP_DMA, (order))
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 76/83] [mips, s390, score] turn empty_zero_page into pointer
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (74 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 75/83] kill __get_free_page() Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 77/83] sparc: switch to get_free_pages() Al Viro
                   ` (7 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/mips/include/asm/pgtable.h  | 4 ++--
 arch/mips/mm/init.c              | 7 ++++---
 arch/s390/include/asm/pgtable.h  | 6 +++---
 arch/s390/mm/init.c              | 7 ++++---
 arch/score/include/asm/pgtable.h | 6 +++---
 arch/score/mm/init.c             | 6 +++---
 6 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
index 8957f15..f0e06c6 100644
--- a/arch/mips/include/asm/pgtable.h
+++ b/arch/mips/include/asm/pgtable.h
@@ -75,11 +75,11 @@ extern unsigned long _page_cachable_default;
  * for zero-mapped memory areas etc..
  */
 
-extern unsigned long empty_zero_page;
+extern void *empty_zero_page;
 extern unsigned long zero_page_mask;
 
 #define ZERO_PAGE(vaddr) \
-	(virt_to_page((void *)(empty_zero_page + (((unsigned long)(vaddr)) & zero_page_mask))))
+	(virt_to_page((empty_zero_page + (((unsigned long)(vaddr)) & zero_page_mask))))
 #define __HAVE_COLOR_ZERO_PAGE
 
 extern void paging_init(void);
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 8770e61..872e7a1 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -53,7 +53,8 @@
  * any price.  Since page is never written to after the initialization we
  * don't have to care about aliases on other CPUs.
  */
-unsigned long empty_zero_page, zero_page_mask;
+void *empty_zero_page;
+unsigned long zero_page_mask;
 EXPORT_SYMBOL_GPL(empty_zero_page);
 EXPORT_SYMBOL(zero_page_mask);
 
@@ -70,11 +71,11 @@ void setup_zero_pages(void)
 	else
 		order = 0;
 
-	empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
+	empty_zero_page = get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
 	if (!empty_zero_page)
 		panic("Oh boy, that early out of memory?");
 
-	page = virt_to_page((void *)empty_zero_page);
+	page = virt_to_page(empty_zero_page);
 	split_page(page, order);
 	for (i = 0; i < (1 << order); i++, page++)
 		mark_page_reserved(page);
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
index 024f85f..f6fe409 100644
--- a/arch/s390/include/asm/pgtable.h
+++ b/arch/s390/include/asm/pgtable.h
@@ -47,12 +47,12 @@ extern void vmem_map_init(void);
  * for zero-mapped memory areas etc..
  */
 
-extern unsigned long empty_zero_page;
+extern void *empty_zero_page;
 extern unsigned long zero_page_mask;
 
 #define ZERO_PAGE(vaddr) \
-	(virt_to_page((void *)(empty_zero_page + \
-	 (((unsigned long)(vaddr)) &zero_page_mask))))
+	(virt_to_page(empty_zero_page + \
+	 (((unsigned long)(vaddr)) &zero_page_mask)))
 #define __HAVE_COLOR_ZERO_PAGE
 
 /* TODO: s390 cannot support io_remap_pfn_range... */
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c
index c722400..7c8190f 100644
--- a/arch/s390/mm/init.c
+++ b/arch/s390/mm/init.c
@@ -42,7 +42,8 @@
 
 pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__((__aligned__(PAGE_SIZE)));
 
-unsigned long empty_zero_page, zero_page_mask;
+void *empty_zero_page;
+unsigned long zero_page_mask;
 EXPORT_SYMBOL(empty_zero_page);
 EXPORT_SYMBOL(zero_page_mask);
 
@@ -59,11 +60,11 @@ static void __init setup_zero_pages(void)
 	while (order > 2 && (totalram_pages >> 10) < (1UL << order))
 		order--;
 
-	empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
+	empty_zero_page = get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
 	if (!empty_zero_page)
 		panic("Out of memory in setup_zero_pages");
 
-	page = virt_to_page((void *) empty_zero_page);
+	page = virt_to_page(empty_zero_page);
 	split_page(page, order);
 	for (i = 1 << order; i > 0; i--) {
 		mark_page_reserved(page);
diff --git a/arch/score/include/asm/pgtable.h b/arch/score/include/asm/pgtable.h
index 0553e5c..8f5b1be 100644
--- a/arch/score/include/asm/pgtable.h
+++ b/arch/score/include/asm/pgtable.h
@@ -163,12 +163,12 @@ static inline pgprot_t pgprot_noncached(pgprot_t _prot)
 #define __swp_offset(x) 	((x).val >> 10)
 #define __swp_entry(type, offset) ((swp_entry_t){(type) | ((offset) << 10)})
 
-extern unsigned long empty_zero_page;
+extern void *empty_zero_page;
 extern unsigned long zero_page_mask;
 
 #define ZERO_PAGE(vaddr) \
-	(virt_to_page((void *)(empty_zero_page + \
-	 (((unsigned long)(vaddr)) & zero_page_mask))))
+	(virt_to_page(empty_zero_page + \
+	 (((unsigned long)(vaddr)) & zero_page_mask)))
 
 #define pgtable_cache_init()	do {} while (0)
 
diff --git a/arch/score/mm/init.c b/arch/score/mm/init.c
index 9fbce49..b4db012 100644
--- a/arch/score/mm/init.c
+++ b/arch/score/mm/init.c
@@ -38,18 +38,18 @@
 #include <asm/sections.h>
 #include <asm/tlb.h>
 
-unsigned long empty_zero_page;
+void *empty_zero_page;
 EXPORT_SYMBOL_GPL(empty_zero_page);
 
 static void setup_zero_page(void)
 {
 	struct page *page;
 
-	empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, 0);
+	empty_zero_page = get_free_pages(GFP_KERNEL | __GFP_ZERO, 0);
 	if (!empty_zero_page)
 		panic("Oh boy, that early out of memory?");
 
-	page = virt_to_page((void *) empty_zero_page);
+	page = virt_to_page(empty_zero_page);
 	mark_page_reserved(page);
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 77/83] sparc: switch to get_free_pages()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (75 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 76/83] [mips, s390, score] turn empty_zero_page into pointer Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 78/83] x86: " Al Viro
                   ` (6 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/sparc/kernel/irq_64.c | 3 +--
 arch/sparc/mm/iommu.c      | 6 +++---
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index 8858bb0..54a55ce 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -1019,9 +1019,8 @@ static void __init alloc_one_queue(unsigned long *pa_ptr, unsigned long qmask)
 {
 	unsigned long size = PAGE_ALIGN(qmask + 1);
 	unsigned long order = get_order(size);
-	unsigned long p;
+	void *p = get_free_pages(GFP_KERNEL, order);
 
-	p = __get_free_pages(GFP_KERNEL, order);
 	if (!p) {
 		prom_printf("SUN4V: Error, cannot allocate queue.\n");
 		prom_halt();
diff --git a/arch/sparc/mm/iommu.c b/arch/sparc/mm/iommu.c
index f9d30bd..113dabf 100644
--- a/arch/sparc/mm/iommu.c
+++ b/arch/sparc/mm/iommu.c
@@ -60,7 +60,7 @@ static void __init sbus_iommu_init(struct platform_device *op)
 	unsigned long *bitmap;
 	unsigned long control;
 	unsigned long base;
-	unsigned long tmp;
+	iopte_t *tmp;
 
 	iommu = kmalloc(sizeof(struct iommu_struct), GFP_KERNEL);
 	if (!iommu) {
@@ -91,13 +91,13 @@ static void __init sbus_iommu_init(struct platform_device *op)
 	   We need 256K or 512K or 1M or 2M area aligned to
            its size and current gfp will fortunately give
            it to us. */
-        tmp = __get_free_pages(GFP_KERNEL, IOMMU_ORDER);
+        tmp = get_free_pages(GFP_KERNEL, IOMMU_ORDER);
 	if (!tmp) {
 		prom_printf("Unable to allocate iommu table [0x%lx]\n",
 			    IOMMU_NPTES * sizeof(iopte_t));
 		prom_halt();
 	}
-	iommu->page_table = (iopte_t *)tmp;
+	iommu->page_table = tmp;
 
 	/* Initialize new table. */
 	memset(iommu->page_table, 0, IOMMU_NPTES*sizeof(iopte_t));
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 78/83] x86: switch to get_free_pages()
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (76 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 77/83] sparc: switch to get_free_pages() Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 79/83] s390: turn suspend_zero_pages into a pointer Al Viro
                   ` (5 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/x86/kernel/tce_64.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kernel/tce_64.c b/arch/x86/kernel/tce_64.c
index ab40954..c6d5208 100644
--- a/arch/x86/kernel/tce_64.c
+++ b/arch/x86/kernel/tce_64.c
@@ -98,7 +98,7 @@ static inline unsigned int table_size_to_number_of_entries(unsigned char size)
 static int tce_table_setparms(struct pci_dev *dev, struct iommu_table *tbl)
 {
 	unsigned int bitmapsz;
-	unsigned long bmppages;
+	unsigned long *bmppages;
 	int ret;
 
 	tbl->it_busno = dev->bus->number;
@@ -111,14 +111,14 @@ static int tce_table_setparms(struct pci_dev *dev, struct iommu_table *tbl)
 	 * entries; we need one bit per entry
 	 */
 	bitmapsz = tbl->it_size / BITS_PER_BYTE;
-	bmppages = __get_free_pages(GFP_KERNEL, get_order(bitmapsz));
+	bmppages = get_free_pages(GFP_KERNEL, get_order(bitmapsz));
 	if (!bmppages) {
 		printk(KERN_ERR "Calgary: cannot allocate bitmap\n");
 		ret = -ENOMEM;
 		goto done;
 	}
 
-	tbl->it_map = (unsigned long*)bmppages;
+	tbl->it_map = bmppages;
 
 	memset(tbl->it_map, 0, bitmapsz);
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 79/83] s390: turn suspend_zero_pages into a pointer
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (77 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 78/83] x86: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 80/83] [sun3] try to sort dvma types out Al Viro
                   ` (4 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/s390/kernel/entry.h   | 2 +-
 arch/s390/kernel/suspend.c | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/s390/kernel/entry.h b/arch/s390/kernel/entry.h
index b7019ab..612b35c 100644
--- a/arch/s390/kernel/entry.h
+++ b/arch/s390/kernel/entry.h
@@ -7,7 +7,7 @@
 #include <asm/idle.h>
 
 extern void *restart_stack;
-extern unsigned long suspend_zero_pages;
+extern void *suspend_zero_pages;
 
 void system_call(void);
 void pgm_check_handler(void);
diff --git a/arch/s390/kernel/suspend.c b/arch/s390/kernel/suspend.c
index c40bdca..4ce1cc3 100644
--- a/arch/s390/kernel/suspend.c
+++ b/arch/s390/kernel/suspend.c
@@ -41,7 +41,7 @@ struct page_key_data {
 static struct page_key_data *page_key_data;
 static struct page_key_data *page_key_rp, *page_key_wp;
 static unsigned long page_key_rx, page_key_wx;
-unsigned long suspend_zero_pages;
+void *suspend_zero_pages;
 
 /*
  * For each page in the hibernation image one additional byte is
@@ -163,13 +163,13 @@ static int suspend_pm_cb(struct notifier_block *nb, unsigned long action,
 	switch (action) {
 	case PM_SUSPEND_PREPARE:
 	case PM_HIBERNATION_PREPARE:
-		suspend_zero_pages = __get_free_pages(GFP_KERNEL, LC_ORDER);
+		suspend_zero_pages = get_free_pages(GFP_KERNEL, LC_ORDER);
 		if (!suspend_zero_pages)
 			return NOTIFY_BAD;
 		break;
 	case PM_POST_SUSPEND:
 	case PM_POST_HIBERNATION:
-		free_pages((void *)suspend_zero_pages, LC_ORDER);
+		free_pages(suspend_zero_pages, LC_ORDER);
 		break;
 	default:
 		return NOTIFY_DONE;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 80/83] [sun3] try to sort dvma types out
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (78 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 79/83] s390: turn suspend_zero_pages into a pointer Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 81/83] sba_iommu: get rid of pointless casts Al Viro
                   ` (3 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

[I've pretty much zero confidence in that one - if anything, it would need
to be split]

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/m68k/include/asm/dvma.h             | 21 +++++--------
 arch/m68k/sun3/dvma.c                    | 31 ++++++++-----------
 arch/m68k/sun3/sun3dvma.c                | 52 ++++++++++++++------------------
 arch/m68k/sun3x/dvma.c                   | 15 +++------
 drivers/net/ethernet/i825xx/sun3_82586.c | 13 ++++----
 drivers/scsi/sun3_scsi.c                 | 23 ++++++--------
 6 files changed, 64 insertions(+), 91 deletions(-)

diff --git a/arch/m68k/include/asm/dvma.h b/arch/m68k/include/asm/dvma.h
index 890bbf7..1fa85e5 100644
--- a/arch/m68k/include/asm/dvma.h
+++ b/arch/m68k/include/asm/dvma.h
@@ -16,18 +16,16 @@
 #define DVMA_PAGE_ALIGN(addr)	ALIGN(addr, DVMA_PAGE_SIZE)
 
 extern void dvma_init(void);
-extern int dvma_map_iommu(unsigned long kaddr, unsigned long baddr,
-			  int len);
+extern int dvma_map_iommu(void *kaddr, unsigned long baddr, int len);
 
 #define dvma_malloc(x) dvma_malloc_align(x, 0)
 #define dvma_map(x, y) dvma_map_align(x, y, 0)
 #define dvma_map_vme(x, y) (dvma_map(x, y) & 0xfffff)
 #define dvma_map_align_vme(x, y, z) (dvma_map_align (x, y, z) & 0xfffff)
-extern unsigned long dvma_map_align(unsigned long kaddr, int len,
-			    int align);
+extern unsigned long dvma_map_align(void *kaddr, int len, int align);
 extern void *dvma_malloc_align(unsigned long len, unsigned long align);
 
-extern void dvma_unmap(void *baddr);
+extern void dvma_unmap(unsigned long);
 extern void dvma_free(void *vaddr);
 
 
@@ -51,14 +49,13 @@ extern void dvma_free(void *vaddr);
 
 /* virt <-> phys conversions */
 #define dvma_vtop(x) ((unsigned long)(x) & 0xffffff)
-#define dvma_ptov(x) ((unsigned long)(x) | 0xf000000)
+#define dvma_ptov(x) ((void *)((unsigned long)(x) | 0xf000000))
 #define dvma_vtovme(x) ((unsigned long)(x) & 0x00fffff)
-#define dvma_vmetov(x) ((unsigned long)(x) | 0xff00000)
+#define dvma_vmetov(x) ((void*)((unsigned long)(x) | 0xff00000))
 #define dvma_vtob(x) dvma_vtop(x)
 #define dvma_btov(x) dvma_ptov(x)
 
-static inline int dvma_map_cpu(unsigned long kaddr, unsigned long vaddr,
-			       int len)
+static inline int dvma_map_cpu(void *kaddr, void *vaddr, int len)
 {
 	return 0;
 }
@@ -75,11 +72,9 @@ static inline int dvma_map_cpu(unsigned long kaddr, unsigned long vaddr,
 #define IOMMU_ENTRIES              (IOMMU_TOTAL_ENTRIES - 0x80)
 
 #define dvma_vtob(x) ((unsigned long)(x) & 0x00ffffff)
-#define dvma_btov(x) ((unsigned long)(x) | 0xff000000)
-
-extern int dvma_map_cpu(unsigned long kaddr, unsigned long vaddr, int len);
-
+#define dvma_btov(x) ((void *)((unsigned long)(x) | 0xff000000))
 
+extern int dvma_map_cpu(void *kaddr, void *vaddr, int len);
 
 /* everything below this line is specific to dma used for the onboard
    ESP scsi on sun3x */
diff --git a/arch/m68k/sun3/dvma.c b/arch/m68k/sun3/dvma.c
index d95506e..0b0d352 100644
--- a/arch/m68k/sun3/dvma.c
+++ b/arch/m68k/sun3/dvma.c
@@ -20,47 +20,42 @@
 
 static unsigned long ptelist[120];
 
-static unsigned long dvma_page(unsigned long kaddr, unsigned long vaddr)
+static void *dvma_page(void *kaddr, void *vaddr)
 {
 	unsigned long pte;
 	unsigned long j;
 	pte_t ptep;
+	int idx;
 
 	j = *(volatile unsigned long *)kaddr;
 	*(volatile unsigned long *)kaddr = j;
 
 	ptep = pfn_pte(virt_to_pfn(kaddr), PAGE_KERNEL);
 	pte = pte_val(ptep);
-//		printk("dvma_remap: addr %lx -> %lx pte %08lx len %x\n",
+//		printk("dvma_remap: addr %p -> %lx pte %08lx len %x\n",
 //		       kaddr, vaddr, pte, len);
-	if(ptelist[(vaddr & 0xff000) >> PAGE_SHIFT] != pte) {
-		sun3_put_pte(vaddr, pte);
-		ptelist[(vaddr & 0xff000) >> PAGE_SHIFT] = pte;
-	}
+	idx = ((unsigned long)vaddr & 0xff000) >> PAGE_SHIFT;
 
-	return (vaddr + (kaddr & ~PAGE_MASK));
+	if (ptelist[idx] != pte) {
+		sun3_put_pte((unsigned long)vaddr, pte);
+		ptelist[idx] = pte;
+	}
 
+	return vaddr + offset_in_page(kaddr);
 }
 
-int dvma_map_iommu(unsigned long kaddr, unsigned long baddr,
-			      int len)
+int dvma_map_iommu(void *kaddr, unsigned long baddr, int len)
 {
+	void *vaddr = dvma_btov(baddr);
+	void *end = vaddr + len;
 
-	unsigned long end;
-	unsigned long vaddr;
-
-	vaddr = dvma_btov(baddr);
-
-	end = vaddr + len;
-
-	while(vaddr < end) {
+	while (vaddr < end) {
 		dvma_page(kaddr, vaddr);
 		kaddr += PAGE_SIZE;
 		vaddr += PAGE_SIZE;
 	}
 
 	return 0;
-
 }
 
 void __init sun3_dvma_init(void)
diff --git a/arch/m68k/sun3/sun3dvma.c b/arch/m68k/sun3/sun3dvma.c
index fdc4900..68eefa4 100644
--- a/arch/m68k/sun3/sun3dvma.c
+++ b/arch/m68k/sun3/sun3dvma.c
@@ -277,7 +277,7 @@ void __init dvma_init(void)
 
 }
 
-unsigned long dvma_map_align(unsigned long kaddr, int len, int align)
+unsigned long dvma_map_align(void *kaddr, int len, int align)
 {
 
 	unsigned long baddr;
@@ -287,58 +287,52 @@ unsigned long dvma_map_align(unsigned long kaddr, int len, int align)
 		len = 0x800;
 
 	if(!kaddr || !len) {
-//		printk("error: kaddr %lx len %x\n", kaddr, len);
+//		printk("error: kaddr %p len %x\n", kaddr, len);
 //		*(int *)4 = 0;
 		return 0;
 	}
 
 #ifdef DEBUG
-	printk("dvma_map request %08lx bytes from %08lx\n",
+	printk("dvma_map request %08lx bytes from %p\n",
 	       len, kaddr);
 #endif
-	off = kaddr & ~DVMA_PAGE_MASK;
-	kaddr &= PAGE_MASK;
+	off = (unsigned long)kaddr % DVMA_PAGE_SIZE;
+	kaddr -= off;
 	len += off;
-	len = ((len + (DVMA_PAGE_SIZE-1)) & DVMA_PAGE_MASK);
+	len = ALIGN(len, DVMA_PAGE_SIZE);
 
 	if(align == 0)
 		align = DVMA_PAGE_SIZE;
 	else
-		align = ((align + (DVMA_PAGE_SIZE-1)) & DVMA_PAGE_MASK);
+		align = ALIGN(align, DVMA_PAGE_SIZE);
 
 	baddr = get_baddr(len, align);
 //	printk("using baddr %lx\n", baddr);
 
-	if(!dvma_map_iommu(kaddr, baddr, len))
+	if (!dvma_map_iommu(kaddr, baddr, len))
 		return (baddr + off);
 
-	printk("dvma_map failed kaddr %lx baddr %lx len %x\n", kaddr, baddr, len);
+	printk("dvma_map failed kaddr %p baddr %lx len %x\n", kaddr, baddr, len);
 	BUG();
 	return 0;
 }
 EXPORT_SYMBOL(dvma_map_align);
 
-void dvma_unmap(void *baddr)
+void dvma_unmap(unsigned long baddr)
 {
-	unsigned long addr;
-
-	addr = (unsigned long)baddr;
 	/* check if this is a vme mapping */
-	if(!(addr & 0x00f00000))
-		addr |= 0xf00000;
-
-	free_baddr(addr);
-
-	return;
+	if (!(baddr & 0x00f00000))
+		baddr |= 0xf00000;
 
+	free_baddr(baddr);
 }
 EXPORT_SYMBOL(dvma_unmap);
 
 void *dvma_malloc_align(unsigned long len, unsigned long align)
 {
-	unsigned long kaddr;
+	void *kaddr;
 	unsigned long baddr;
-	unsigned long vaddr;
+	void *vaddr;
 
 	if(!len)
 		return NULL;
@@ -348,28 +342,28 @@ void *dvma_malloc_align(unsigned long len, unsigned long align)
 #endif
 	len = ((len + (DVMA_PAGE_SIZE-1)) & DVMA_PAGE_MASK);
 
-        if((kaddr = __get_free_pages(GFP_ATOMIC, get_order(len))) == 0)
+        if((kaddr = get_free_pages(GFP_ATOMIC, get_order(len))) == NULL)
 		return NULL;
 
-	if((baddr = (unsigned long)dvma_map_align(kaddr, len, align)) == 0) {
-		free_pages((void *)kaddr, get_order(len));
+	if((baddr = dvma_map_align(kaddr, len, align)) == 0) {
+		free_pages(kaddr, get_order(len));
 		return NULL;
 	}
 
 	vaddr = dvma_btov(baddr);
 
-	if(dvma_map_cpu(kaddr, vaddr, len) < 0) {
-		dvma_unmap((void *)baddr);
-		free_pages((void *)kaddr, get_order(len));
+	if (dvma_map_cpu(kaddr, vaddr, len) < 0) {
+		dvma_unmap(baddr);
+		free_pages(kaddr, get_order(len));
 		return NULL;
 	}
 
 #ifdef DEBUG
-	printk("mapped %08lx bytes %08lx kern -> %08lx bus\n",
+	printk("mapped %08lx bytes %p kern -> %08lx bus\n",
 	       len, kaddr, baddr);
 #endif
 
-	return (void *)vaddr;
+	return vaddr;
 
 }
 EXPORT_SYMBOL(dvma_malloc_align);
diff --git a/arch/m68k/sun3x/dvma.c b/arch/m68k/sun3x/dvma.c
index d5ddcda..a85faa5 100644
--- a/arch/m68k/sun3x/dvma.c
+++ b/arch/m68k/sun3x/dvma.c
@@ -79,18 +79,14 @@ void dvma_print (unsigned long dvma_addr)
 
 /* create a virtual mapping for a page assigned within the IOMMU
    so that the cpu can reach it easily */
-inline int dvma_map_cpu(unsigned long kaddr,
-			       unsigned long vaddr, int len)
+int dvma_map_cpu(void *k, void *v, int len)
 {
 	pgd_t *pgd;
-	unsigned long end;
+	unsigned long kaddr = (unsigned long)k & PAGE_MASK;
+	unsigned long vaddr = (unsigned long)v & PAGE_MASK;
+	unsigned long end = PAGE_ALIGN(vaddr + len);
 	int ret = 0;
 
-	kaddr &= PAGE_MASK;
-	vaddr &= PAGE_MASK;
-
-	end = PAGE_ALIGN(vaddr + len);
-
 #ifdef DEBUG
 	printk("dvma: mapping kern %08lx to virt %08lx\n",
 	       kaddr, vaddr);
@@ -148,8 +144,7 @@ inline int dvma_map_cpu(unsigned long kaddr,
 }
 
 
-inline int dvma_map_iommu(unsigned long kaddr, unsigned long baddr,
-				 int len)
+int dvma_map_iommu(void *kaddr, unsigned long baddr, int len)
 {
 	unsigned long end, index;
 
diff --git a/drivers/net/ethernet/i825xx/sun3_82586.c b/drivers/net/ethernet/i825xx/sun3_82586.c
index 353f57f6..a9a279f 100644
--- a/drivers/net/ethernet/i825xx/sun3_82586.c
+++ b/drivers/net/ethernet/i825xx/sun3_82586.c
@@ -131,7 +131,7 @@ static void    sun3_82586_dump(struct net_device *,void *);
 
 /* helper-functions */
 static int     init586(struct net_device *dev);
-static int     check586(struct net_device *dev,char *where,unsigned size);
+static int     check586(struct net_device *dev,unsigned long where,unsigned size);
 static void    alloc586(struct net_device *dev);
 static void    startrecv586(struct net_device *dev);
 static void   *alloc_rfa(struct net_device *dev,void *ptr);
@@ -203,7 +203,7 @@ static int sun3_82586_open(struct net_device *dev)
 /**********************************************
  * Check to see if there's an 82586 out there.
  */
-static int check586(struct net_device *dev,char *where,unsigned size)
+static int check586(struct net_device *dev,unsigned long where,unsigned size)
 {
 	struct priv pb;
 	struct priv *p = &pb;
@@ -211,7 +211,7 @@ static int check586(struct net_device *dev,char *where,unsigned size)
 	int i;
 
 	p->base = (unsigned long) dvma_btov(0);
-	p->memtop = (char *)dvma_btov((unsigned long)where);
+	p->memtop = dvma_btov(where);
 	p->scp = (struct scp_struct *)(p->base + SCP_DEFAULT_ADDRESS);
 	memset((char *)p->scp,0, sizeof(struct scp_struct));
 	for(i=0;i<sizeof(struct scp_struct);i++) /* memory was writeable? */
@@ -221,7 +221,7 @@ static int check586(struct net_device *dev,char *where,unsigned size)
 	if(p->scp->sysbus != SYSBUSVAL)
 		return 0;
 
-	iscp_addr = (char *)dvma_btov((unsigned long)where);
+	iscp_addr = dvma_btov(where);
 
 	p->iscp = (struct iscp_struct *) iscp_addr;
 	memset((char *)p->iscp,0, sizeof(struct iscp_struct));
@@ -366,14 +366,13 @@ static int __init sun3_82586_probe1(struct net_device *dev,int ioaddr)
 		retval = -ENODEV;
 		goto out;
 	}
-	if(!check586(dev,(char *) dev->mem_start,size)) {
+	if(!check586(dev, dev->mem_start,size)) {
 		printk("?memcheck, Can't find memory at 0x%lx with size %d!\n",dev->mem_start,size);
 		retval = -ENODEV;
 		goto out;
 	}
 
-	((struct priv *)netdev_priv(dev))->memtop =
-					(char *)dvma_btov(dev->mem_start);
+	((struct priv *)netdev_priv(dev))->memtop = dvma_btov(dev->mem_start);
 	((struct priv *)netdev_priv(dev))->base = (unsigned long) dvma_btov(0);
 	alloc586(dev);
 
diff --git a/drivers/scsi/sun3_scsi.c b/drivers/scsi/sun3_scsi.c
index 22a4283..5cfc634 100644
--- a/drivers/scsi/sun3_scsi.c
+++ b/drivers/scsi/sun3_scsi.c
@@ -100,7 +100,7 @@ static struct scsi_cmnd *sun3_dma_setup_done;
 static unsigned char *sun3_scsi_regp;
 static volatile struct sun3_dma_regs *dregs;
 static struct sun3_udc_regs *udc_regs;
-static unsigned char *sun3_dma_orig_addr = NULL;
+static unsigned long sun3_dma_orig_addr;
 static unsigned long sun3_dma_orig_count = 0;
 static int sun3_dma_active = 0;
 static unsigned long last_residual = 0;
@@ -237,15 +237,15 @@ void sun3_sun3_debug (void)
 /* sun3scsi_dma_setup() -- initialize the dma controller for a read/write */
 static unsigned long sun3scsi_dma_setup(void *data, unsigned long count, int write_flag)
 {
-	void *addr;
+	unsigned long addr;
 
-	if(sun3_dma_orig_addr != NULL)
+	if (sun3_dma_orig_addr)
 		dvma_unmap(sun3_dma_orig_addr);
 
 #ifdef SUN3_SCSI_VME
-	addr = (void *)dvma_map_vme((unsigned long) data, count);
+	addr = dvma_map_vme(data, count);
 #else
-	addr = (void *)dvma_map((unsigned long) data, count);
+	addr = dvma_map(data, count);
 #endif
 		
 	sun3_dma_orig_addr = addr;
@@ -399,9 +399,7 @@ static int sun3scsi_dma_finish(int write_flag)
 	last_residual = fifo;
 	/* empty bytes from the fifo which didn't make it */
 	if ((!write_flag) && (dregs->csr & CSR_LEFT)) {
-		unsigned char *vaddr;
-
-		vaddr = (unsigned char *)dvma_vmetov(sun3_dma_orig_addr);
+		unsigned char *vaddr = dvma_vmetov(sun3_dma_orig_addr);
 
 		vaddr += (sun3_dma_orig_count - fifo);
 		vaddr--;
@@ -444,11 +442,8 @@ static int sun3scsi_dma_finish(int write_flag)
 
 	/* empty bytes from the fifo which didn't make it */
 	if((!write_flag) && (count - fifo) == 2) {
-		unsigned short data;
-		unsigned char *vaddr;
-
-		data = dregs->fifo_data;
-		vaddr = (unsigned char *)dvma_btov(sun3_dma_orig_addr);
+		unsigned short data = dregs->fifo_data;
+		unsigned char *vaddr = dvma_btov(sun3_dma_orig_addr);
 		
 		vaddr += (sun3_dma_orig_count - fifo);
 
@@ -458,7 +453,7 @@ static int sun3scsi_dma_finish(int write_flag)
 #endif
 
 	dvma_unmap(sun3_dma_orig_addr);
-	sun3_dma_orig_addr = NULL;
+	sun3_dma_orig_addr = 0;
 
 #ifdef SUN3_SCSI_VME
 	dregs->dma_addr_hi = 0;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 81/83] sba_iommu: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (79 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 80/83] [sun3] try to sort dvma types out Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 82/83] media/platform/omap: " Al Viro
                   ` (2 subsequent siblings)
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/parisc/sba_iommu.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c
index 10ca71d..a6e76ba 100644
--- a/drivers/parisc/sba_iommu.c
+++ b/drivers/parisc/sba_iommu.c
@@ -1113,11 +1113,11 @@ PAT_MOD(mod)->mod_info.ioc         = PAT_GET_IOC(temp);
 static void *
 sba_alloc_pdir(unsigned int pdir_size)
 {
-        unsigned long pdir_base;
+        void *pdir_base;
 	unsigned long pdir_order = get_order(pdir_size);
 
-	pdir_base = __get_free_pages(GFP_KERNEL, pdir_order);
-	if (NULL == (void *) pdir_base)	{
+	pdir_base = get_free_pages(GFP_KERNEL, pdir_order);
+	if (!pdir_base)	{
 		panic("%s() could not allocate I/O Page Table\n",
 			__func__);
 	}
@@ -1131,7 +1131,7 @@ sba_alloc_pdir(unsigned int pdir_size)
 	if ( ((boot_cpu_data.pdc.cpuid >> 5) & 0x7f) != 0x13
 			|| (boot_cpu_data.pdc.versions > 0x202)
 			|| (boot_cpu_data.pdc.capabilities & 0x08L) )
-		return (void *) pdir_base;
+		return pdir_base;
 
 	/*
 	 * PA8700 (PCX-W2, aka piranha) silent data corruption fix
@@ -1154,16 +1154,16 @@ sba_alloc_pdir(unsigned int pdir_size)
 	if (pdir_order <= (19-12)) {
 		if (((virt_to_phys(pdir_base)+pdir_size-1) & PIRANHA_ADDR_MASK) == PIRANHA_ADDR_VAL) {
 			/* allocate a new one on 512k alignment */
-			unsigned long new_pdir = __get_free_pages(GFP_KERNEL, (19-12));
+			void *new_pdir = get_free_pages(GFP_KERNEL, (19-12));
 			/* release original */
-			free_pages((void *)pdir_base, pdir_order);
+			free_pages(pdir_base, pdir_order);
 
 			pdir_base = new_pdir;
 
 			/* release excess */
 			while (pdir_order < (19-12)) {
 				new_pdir += pdir_size;
-				free_pages((void *)new_pdir, pdir_order);
+				free_pages(new_pdir, pdir_order);
 				pdir_order +=1;
 				pdir_size <<=1;
 			}
@@ -1173,13 +1173,13 @@ sba_alloc_pdir(unsigned int pdir_size)
 		** 1MB or 2MB Pdir
 		** Needs to be aligned on an "odd" 1MB boundary.
 		*/
-		unsigned long new_pdir = __get_free_pages(GFP_KERNEL, pdir_order+1); /* 2 or 4MB */
+		void *new_pdir = get_free_pages(GFP_KERNEL, pdir_order+1); /* 2 or 4MB */
 
 		/* release original */
-		free_pages((void *)pdir_base, pdir_order);
+		free_pages(pdir_base, pdir_order);
 
 		/* release first 1MB */
-		free_pages((void *)new_pdir, 20-12);
+		free_pages(new_pdir, 20-12);
 
 		pdir_base = new_pdir + 1024*1024;
 
@@ -1194,17 +1194,17 @@ sba_alloc_pdir(unsigned int pdir_size)
 
 			new_pdir += 3*1024*1024;
 			/* release last 1MB */
-			free_pages((void *)new_pdir, 20-12);
+			free_pages(new_pdir, 20-12);
 
 			/* release unusable 128KB */
-			free_pages((void *)new_pdir - 128*1024 , 17-12);
+			free_pages(new_pdir - 128*1024 , 17-12);
 
 			pdir_size -= 128*1024;
 		}
 	}
 
-	memset((void *) pdir_base, 0, pdir_size);
-	return (void *) pdir_base;
+	memset(pdir_base, 0, pdir_size);
+	return pdir_base;
 }
 
 struct ibase_data_struct {
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 82/83] media/platform/omap: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (80 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 81/83] sba_iommu: get rid of pointless casts Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-21 23:47 ` [POC][PATCH 83/83] nios2: " Al Viro
  2015-12-22  0:03 ` [RFC] free_pages stuff Linus Torvalds
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

Keep ->smsshado_virt_addrp[] and ->buf_virt_addr[] as pointers.
Note that this stuff is 32bit-only, so both unsigned int and
unsigned long are pointer-sized...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 drivers/media/platform/omap/omap_vout.c      | 26 ++++++++++++++------------
 drivers/media/platform/omap/omap_vout_vrfb.c |  6 +++---
 drivers/media/platform/omap/omap_voutdef.h   |  4 ++--
 drivers/media/platform/omap/omap_voutlib.c   | 15 +++++++--------
 drivers/media/platform/omap/omap_voutlib.h   |  4 ++--
 5 files changed, 28 insertions(+), 27 deletions(-)

diff --git a/drivers/media/platform/omap/omap_vout.c b/drivers/media/platform/omap/omap_vout.c
index 70c28d1..3e298d8 100644
--- a/drivers/media/platform/omap/omap_vout.c
+++ b/drivers/media/platform/omap/omap_vout.c
@@ -240,7 +240,7 @@ void omap_vout_free_buffers(struct omap_vout_device *vout)
 		omap_vout_free_buffer(vout->buf_virt_addr[i],
 				vout->buffer_size);
 		vout->buf_phy_addr[i] = 0;
-		vout->buf_virt_addr[i] = 0;
+		vout->buf_virt_addr[i] = NULL;
 	}
 }
 
@@ -656,7 +656,8 @@ static int omap_vout_buffer_setup(struct videobuf_queue *q, unsigned int *count,
 			  unsigned int *size)
 {
 	int startindex = 0, i, j;
-	u32 phy_addr = 0, virt_addr = 0;
+	u32 phy_addr = 0;
+	void *virt_addr = NULL;
 	struct omap_vout_device *vout = q->priv_data;
 	struct omapvideo_info *ovid = &vout->vid_info;
 	int vid_max_buf_size;
@@ -712,7 +713,7 @@ static int omap_vout_buffer_setup(struct videobuf_queue *q, unsigned int *count,
 				omap_vout_free_buffer(
 						vout->smsshado_virt_addr[j],
 						vout->smsshado_size);
-				vout->smsshado_virt_addr[j] = 0;
+				vout->smsshado_virt_addr[j] = NULL;
 				vout->smsshado_phy_addr[j] = 0;
 				}
 			}
@@ -741,7 +742,7 @@ static void omap_vout_free_extra_buffers(struct omap_vout_device *vout)
 			omap_vout_free_buffer(vout->buf_virt_addr[i],
 					vout->buffer_size);
 
-		vout->buf_virt_addr[i] = 0;
+		vout->buf_virt_addr[i] = NULL;
 		vout->buf_phy_addr[i] = 0;
 	}
 	vout->buffer_allocated = num_buffers;
@@ -782,13 +783,14 @@ static int omap_vout_buffer_prepare(struct videobuf_queue *q,
 		if (ret < 0)
 			return ret;
 	} else {
-		unsigned long addr, dma_addr;
+		void *addr;
+		unsigned long dma_addr;
 		unsigned long size;
 
-		addr = (unsigned long) vout->buf_virt_addr[vb->i];
+		addr = vout->buf_virt_addr[vb->i];
 		size = (unsigned long) vb->size;
 
-		dma_addr = dma_map_single(vout->vid_dev->v4l2_dev.dev, (void *) addr,
+		dma_addr = dma_map_single(vout->vid_dev->v4l2_dev.dev, addr,
 				size, DMA_TO_DEVICE);
 		if (dma_mapping_error(vout->vid_dev->v4l2_dev.dev, dma_addr))
 			v4l2_err(&vout->vid_dev->v4l2_dev, "dma_map_single failed\n");
@@ -913,11 +915,11 @@ static int omap_vout_mmap(struct file *file, struct vm_area_struct *vma)
 	vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
 	vma->vm_ops = &omap_vout_vm_ops;
 	vma->vm_private_data = (void *) vout;
-	pos = (void *)vout->buf_virt_addr[i];
-	vma->vm_pgoff = virt_to_phys((void *)pos) >> PAGE_SHIFT;
+	pos = vout->buf_virt_addr[i];
+	vma->vm_pgoff = virt_to_phys(pos) >> PAGE_SHIFT;
 	while (size > 0) {
 		unsigned long pfn;
-		pfn = virt_to_phys((void *) pos) >> PAGE_SHIFT;
+		pfn = virt_to_phys(pos) >> PAGE_SHIFT;
 		if (remap_pfn_range(vma, start, pfn, PAGE_SIZE, PAGE_SHARED))
 			return -EAGAIN;
 		start += PAGE_SIZE;
@@ -1501,7 +1503,7 @@ static int vidioc_reqbufs(struct file *file, void *fh,
 		for (i = num_buffers; i < vout->buffer_allocated; i++) {
 			omap_vout_free_buffer(vout->buf_virt_addr[i],
 					vout->buffer_size);
-			vout->buf_virt_addr[i] = 0;
+			vout->buf_virt_addr[i] = NULL;
 			vout->buf_phy_addr[i] = 0;
 		}
 		vout->buffer_allocated = num_buffers;
@@ -1979,7 +1981,7 @@ free_buffers:
 	for (i = 0; i < numbuffers; i++) {
 		omap_vout_free_buffer(vout->buf_virt_addr[i],
 						vout->buffer_size);
-		vout->buf_virt_addr[i] = 0;
+		vout->buf_virt_addr[i] = NULL;
 		vout->buf_phy_addr[i] = 0;
 	}
 	return ret;
diff --git a/drivers/media/platform/omap/omap_vout_vrfb.c b/drivers/media/platform/omap/omap_vout_vrfb.c
index c6e2527..1c89189 100644
--- a/drivers/media/platform/omap/omap_vout_vrfb.c
+++ b/drivers/media/platform/omap/omap_vout_vrfb.c
@@ -48,13 +48,13 @@ static int omap_vout_allocate_vrfb_buffers(struct omap_vout_device *vout,
 				omap_vout_free_buffer(
 						vout->smsshado_virt_addr[j],
 						vout->smsshado_size);
-				vout->smsshado_virt_addr[j] = 0;
+				vout->smsshado_virt_addr[j] = NULL;
 				vout->smsshado_phy_addr[j] = 0;
 			}
 			*count = 0;
 			return -ENOMEM;
 		}
-		memset((void *) vout->smsshado_virt_addr[i], 0,
+		memset(vout->smsshado_virt_addr[i], 0,
 				vout->smsshado_size);
 	}
 	return 0;
@@ -81,7 +81,7 @@ void omap_vout_free_vrfb_buffers(struct omap_vout_device *vout)
 	for (j = 0; j < VRFB_NUM_BUFS; j++) {
 		omap_vout_free_buffer(vout->smsshado_virt_addr[j],
 				vout->smsshado_size);
-		vout->smsshado_virt_addr[j] = 0;
+		vout->smsshado_virt_addr[j] = NULL;
 		vout->smsshado_phy_addr[j] = 0;
 	}
 }
diff --git a/drivers/media/platform/omap/omap_voutdef.h b/drivers/media/platform/omap/omap_voutdef.h
index 9ccfe1f..d298d1a 100644
--- a/drivers/media/platform/omap/omap_voutdef.h
+++ b/drivers/media/platform/omap/omap_voutdef.h
@@ -126,7 +126,7 @@ struct omap_vout_device {
 	/* allow to reuse previously allocated buffer which is big enough */
 	int buffer_size;
 	/* keep buffer info across opens */
-	unsigned long buf_virt_addr[VIDEO_MAX_FRAME];
+	void *buf_virt_addr[VIDEO_MAX_FRAME];
 	unsigned long buf_phy_addr[VIDEO_MAX_FRAME];
 	enum omap_color_mode dss_mode;
 
@@ -161,7 +161,7 @@ struct omap_vout_device {
 
 	struct vid_vrfb_dma vrfb_dma_tx;
 	unsigned int smsshado_phy_addr[MAC_VRFB_CTXS];
-	unsigned int smsshado_virt_addr[MAC_VRFB_CTXS];
+	void *smsshado_virt_addr[MAC_VRFB_CTXS];
 	struct vrfb vrfb_context[MAC_VRFB_CTXS];
 	bool vrfb_static_allocation;
 	unsigned int smsshado_size;
diff --git a/drivers/media/platform/omap/omap_voutlib.c b/drivers/media/platform/omap/omap_voutlib.c
index f8cf63a..afce476 100644
--- a/drivers/media/platform/omap/omap_voutlib.c
+++ b/drivers/media/platform/omap/omap_voutlib.c
@@ -298,15 +298,14 @@ EXPORT_SYMBOL_GPL(omap_vout_new_format);
 /*
  * Allocate buffers
  */
-unsigned long omap_vout_alloc_buffer(u32 buf_size, u32 *phys_addr)
+void *omap_vout_alloc_buffer(u32 buf_size, u32 *phys_addr)
 {
 	u32 order, size;
-	unsigned long virt_addr, addr;
+	void *virt_addr, *addr;
 
 	size = PAGE_ALIGN(buf_size);
 	order = get_order(size);
-	virt_addr = __get_free_pages(GFP_KERNEL, order);
-	addr = virt_addr;
+	addr = virt_addr = get_free_pages(GFP_KERNEL, order);
 
 	if (virt_addr) {
 		while (size > 0) {
@@ -315,17 +314,17 @@ unsigned long omap_vout_alloc_buffer(u32 buf_size, u32 *phys_addr)
 			size -= PAGE_SIZE;
 		}
 	}
-	*phys_addr = (u32) virt_to_phys((void *) virt_addr);
+	*phys_addr = (u32) virt_to_phys(virt_addr);
 	return virt_addr;
 }
 
 /*
  * Free buffers
  */
-void omap_vout_free_buffer(unsigned long virtaddr, u32 buf_size)
+void omap_vout_free_buffer(void *virtaddr, u32 buf_size)
 {
 	u32 order, size;
-	unsigned long addr = virtaddr;
+	void *addr = virtaddr;
 
 	size = PAGE_ALIGN(buf_size);
 	order = get_order(size);
@@ -335,7 +334,7 @@ void omap_vout_free_buffer(unsigned long virtaddr, u32 buf_size)
 		addr += PAGE_SIZE;
 		size -= PAGE_SIZE;
 	}
-	free_pages((void *)virtaddr, order);
+	free_pages(virtaddr, order);
 }
 
 bool omap_vout_dss_omap24xx(void)
diff --git a/drivers/media/platform/omap/omap_voutlib.h b/drivers/media/platform/omap/omap_voutlib.h
index f9d1c07..c62894e 100644
--- a/drivers/media/platform/omap/omap_voutlib.h
+++ b/drivers/media/platform/omap/omap_voutlib.h
@@ -30,8 +30,8 @@ int omap_vout_new_window(struct v4l2_rect *crop,
 void omap_vout_new_format(struct v4l2_pix_format *pix,
 		struct v4l2_framebuffer *fbuf, struct v4l2_rect *crop,
 		struct v4l2_window *win);
-unsigned long omap_vout_alloc_buffer(u32 buf_size, u32 *phys_addr);
-void omap_vout_free_buffer(unsigned long virtaddr, u32 buf_size);
+void *omap_vout_alloc_buffer(u32 buf_size, u32 *phys_addr);
+void omap_vout_free_buffer(void *virtaddr, u32 buf_size);
 
 bool omap_vout_dss_omap24xx(void);
 bool omap_vout_dss_omap34xx(void);
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* [POC][PATCH 83/83] nios2: get rid of pointless casts
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (81 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 82/83] media/platform/omap: " Al Viro
@ 2015-12-21 23:47 ` Al Viro
  2015-12-22  0:03 ` [RFC] free_pages stuff Linus Torvalds
  83 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-21 23:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds

From: Al Viro <viro@zeniv.linux.org.uk>

flush_icache_range() really looks like a candidate for conversion
to taking void * as arguments...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/nios2/mm/init.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/nios2/mm/init.c b/arch/nios2/mm/init.c
index e03a757..b76ad1d 100644
--- a/arch/nios2/mm/init.c
+++ b/arch/nios2/mm/init.c
@@ -103,16 +103,16 @@ static int alloc_kuser_page(void)
 {
 	extern char __kuser_helper_start[], __kuser_helper_end[];
 	int kuser_sz = __kuser_helper_end - __kuser_helper_start;
-	unsigned long vpage;
+	void *vpage = get_zeroed_page(GFP_ATOMIC);
 
-	vpage = (unsigned long)get_zeroed_page(GFP_ATOMIC);
 	if (!vpage)
 		return -ENOMEM;
 
 	/* Copy kuser helpers */
-	memcpy((void *)vpage, __kuser_helper_start, kuser_sz);
+	memcpy(vpage, __kuser_helper_start, kuser_sz);
 
-	flush_icache_range(vpage, vpage + KUSER_SIZE);
+	flush_icache_range((unsigned long)vpage,
+			   (unsigned long)vpage + KUSER_SIZE);
 	kuser_page[0] = virt_to_page(vpage);
 
 	return 0;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 94+ messages in thread

* Re: [RFC] free_pages stuff
  2015-12-21 23:46 [RFC] free_pages stuff Al Viro
                   ` (82 preceding siblings ...)
  2015-12-21 23:47 ` [POC][PATCH 83/83] nios2: " Al Viro
@ 2015-12-22  0:03 ` Linus Torvalds
  2015-12-22  1:04   ` Al Viro
  83 siblings, 1 reply; 94+ messages in thread
From: Linus Torvalds @ 2015-12-22  0:03 UTC (permalink / raw)
  To: Al Viro; +Cc: Linux Kernel Mailing List

On Mon, Dec 21, 2015 at 3:46 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
>         FWIW, I'd done a proof-of-concept patch series converting the things
> to
>         * free_page() and free_pages() taking the address to free as a pointer
>         * get_zeroed_page() returning a pointer
>         * get_free_page()/get_free_pages() added, both returning a pointer
>         * __get_dma_pages() replaced with get_dma_page() (again, returns
> a pointer)

Absolutely not.

I will not take this, and it's stupid in the extreme.

No way in hell do we suddenly change the semantics of an interface
that has been around from basically day #1. That's just crazy talk.

Just looking at the diffstat should have made you realize that this is
stupid. The confusion it causes, the pain it causes for backports, and
just the fundamental idiocy of changing an long-standing interface
without changing the name is just not acceptable.

If you want to have versions of the function that return pointers, you
had damn well better give them new names. Not use the same name for a
different function, causing confusion and forcing this kind of crazy
"change everything at once" flag-day patches, and pain for
backporting.

And quite frankly, even the "new name" is likely a bad idea. If you
want to allocate a page, and get a pointer, just use "kmalloc()".
Boom, done!

So I don't know how many ways I can say "NO", but I'll not take
anythign like this. It's *completely* wrong.

                 Linus

^ permalink raw reply	[flat|nested] 94+ messages in thread

* Re: [RFC] free_pages stuff
  2015-12-22  0:03 ` [RFC] free_pages stuff Linus Torvalds
@ 2015-12-22  1:04   ` Al Viro
       [not found]     ` <CA+55aFy9NrV_RnziN9z3p5O6rv1A0mirhLD0hL7Wrb77+YyBeg@mail.gmail.com>
  0 siblings, 1 reply; 94+ messages in thread
From: Al Viro @ 2015-12-22  1:04 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux Kernel Mailing List

On Mon, Dec 21, 2015 at 04:03:11PM -0800, Linus Torvalds wrote:

> If you want to have versions of the function that return pointers, you
> had damn well better give them new names. Not use the same name for a
> different function, causing confusion and forcing this kind of crazy
> "change everything at once" flag-day patches, and pain for
> backporting.

*shrug*

Up to you.  I'll cherry-pick the fixes for bugs found in process and leave
the rest alone.
 
> And quite frankly, even the "new name" is likely a bad idea. If you
> want to allocate a page, and get a pointer, just use "kmalloc()".
> Boom, done!

Erm...  You've just described the absolute majority of callers.  Really.
Counting typecasts demonstrates _that_ very clearly.  Any place that
wanted to allocate a page and get a pointer needs a typecast in mainline;
any place that wanted to allocate a page and get a number would need
one after this series.  Similar for freeing something that is a pointer
and is a number respectively.

The total after that series was 70 typecasts added and 1408 removed.  In other
words, "want to allocate a page and get a pointer" outnumbers the "want to
allocate a page and get a number" a _lot_.

Do you really mean that we are overusing __get_free_page() and friends that
much and that we should simply use kmalloc() instead?  I'm not saying that
it's wrong - a lot of places clearly would be fine with kmalloc/kfree.
For something like page table allocations kmalloc() is obviously wrong (and
they also are of "get a pointer" sort), but that's a very small fraction.

> So I don't know how many ways I can say "NO", but I'll not take
> anythign like this. It's *completely* wrong.

OK.  Don't get me wrong - I'm not fond of all-over-the-tree changes either;
I wanted to figure out how the damn thing is actually used and I have found
that.  What (if anything) to do with that is a separate question.

For me the bottom line so far is that we have a lot of places where page
allocator is used and the majority of those uses the result as a pointer.
That, with the calling conventions we have (and had all along), means tons
of boilerplate.  It also means a lot of opportunities to mix physical,
virtual and DMA addresses, since typechecking is completely bypassed by
those typecasts.

If I understood you correctly, in a lot of those cases the answer should've
been "just use kmalloc() and be done with that".  And something like
e.g. debugfs read and write methods of some wireless NIC driver
certainly could use kmalloc(); any concerns about extra overhead are
ridiculous there.  The same goes for e.g. sysfs symlink body generated
when we run into one, etc.  I'm not suggesting to start converting existing
code to kmalloc; that only goes for new code being written, obviously.

PS: in case you've said that "NO" earlier and I'd missed your replies, my
apologies for keeping that up; this is really the first response from you I've
seen on this topic.

^ permalink raw reply	[flat|nested] 94+ messages in thread

* Re: [RFC] free_pages stuff
       [not found]     ` <CA+55aFy9NrV_RnziN9z3p5O6rv1A0mirhLD0hL7Wrb77+YyBeg@mail.gmail.com>
@ 2015-12-22  1:23       ` Linus Torvalds
  2015-12-22  3:10         ` Al Viro
  2015-12-22  2:22       ` Al Viro
  1 sibling, 1 reply; 94+ messages in thread
From: Linus Torvalds @ 2015-12-22  1:23 UTC (permalink / raw)
  To: Al Viro; +Cc: Linux Kernel Mailing List

[ Grr. Resending because the stupid android gmail app still can't do
text emails ]

On Dec 21, 2015 17:04, "Al Viro" <viro@zeniv.linux.org.uk> wrote:
>
> > And quite frankly, even the "new name" is likely a bad idea. If you
> > want to allocate a page, and get a pointer, just use "kmalloc()".
> > Boom, done!
>
> Erm...  You've just described the absolute majority of callers.  Really.

That wasn't my point.

I totally believe that most of the legacy users actually wanted a pointer.

But that doesn't mean that we should just convert a legacy interface.
We should either just create a new interface and leave old users
alone, or if we care about that code and really want to remove the
cast, maybe it should just use kmalloc() instead.

Long ago, allocating a page using kmalloc() was a bad idea, because
there was overhead for it in the allocation and the code.

These days, kmalloc() not only doesn't have the allocation overhead,
but may actually scale better too, thanks to percpu caches etc.

So my point here is that not only is it wrong to change the calling
convention for a legacy function (and it really probably doesn't get
much more legacy than get_free_page - I think it's been around
forever), but even the "let's make up a new name" conversion may be
wrong, because it's entirely possible that the code in question should
just be using kmalloc().

So I don't think an automatic conversion is a good idea. I suspect
that old code that somebody isn't actively working on should just be
left alone, and code that *is* actively worked on should maybe
consider kmalloc().

And if the code really explicitly wants a page (or set of aligned
pages) for some vm reason, I suspect having the cast there isn't a bad
thing. It's clearly not just a random pointer allocation if the bit
pattern of the pointer matters.

And yes, most of the people who used to want "unsigned long" have long
since been converted to take "struct page *" instead, since things
like the VM wants highmem pages etc.  There's a reason why the
historical interface returns "unsigned long": it _used_ to be the
right thing for a lot of code. The fact that there now are more casts
than not are about changing use patterns, but I don't think that means
that we should change the calling convention that has a historical
reason for it.

     Linus

^ permalink raw reply	[flat|nested] 94+ messages in thread

* Re: [RFC] free_pages stuff
       [not found]     ` <CA+55aFy9NrV_RnziN9z3p5O6rv1A0mirhLD0hL7Wrb77+YyBeg@mail.gmail.com>
  2015-12-22  1:23       ` Linus Torvalds
@ 2015-12-22  2:22       ` Al Viro
  2015-12-22  8:21         ` Geert Uytterhoeven
  1 sibling, 1 reply; 94+ messages in thread
From: Al Viro @ 2015-12-22  2:22 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux Kernel Mailing List

On Mon, Dec 21, 2015 at 05:16:44PM -0800, Linus Torvalds wrote:
> On Dec 21, 2015 17:04, "Al Viro" <viro@zeniv.linux.org.uk> wrote:
> >
> > > And quite frankly, even the "new name" is likely a bad idea. If you
> > > want to allocate a page, and get a pointer, just use "kmalloc()".
> > > Boom, done!
> >
> > Erm...  You've just described the absolute majority of callers.  Really.
> 
> That wasn't my point.
> 
> I totally believe that most of the legacy users actually wanted a pointer.
> 
> But that doesn't mean that we should just convert a legacy interface. We
> should either just create a new interface and leave old users alone, or if
> we care about that code and really want to remove the cast, maybe it should
> just use kmalloc() instead.
> 
> Long ago, allocating a page using kmalloc() was a bad idea, because there
> was overhead for it in the allocation and the code.
> 
> These days, kmalloc() not only doesn't have the allocation overhead, but
> may actually scale better too, thanks to percpu caches etc.
> 
> So my point here is that not only is it wrong to change the calling
> convention for a legacy function (and it really probably doesn't get much
> more legacy than get_free_page - I think it's been around forever), but

Yes - present in v0.01, with similar situation re callers even back then ;-)

> even the "let's make up a new name" conversion may be wrong, because it's
> entirely possible that the code in question should just be using kmalloc().
> 
> So I don't think an automatic conversion is a good idea. I suspect that old
> code that somebody isn't actively working on should just be left alone, and
> code that *is* actively worked on should maybe consider kmalloc().

Agreed.  Again, what I really wanted was to get the clear picture of what
uses _are_ there.  In more details than just "grepping seems to indicate
that...".  It's really pretty much all of them.

> And if the code really explicitly wants a page (or set of aligned pages)
> for some vm reason, I suspect having the cast there isn't a bad thing. It's
> clearly not just a random pointer allocation if the bit pattern of the
> pointer matters.

BTW, I'm not sure we don't have code that would assume that
kmalloc(PAGE_SIZE,...) always returns something PAGE_SIZE-aligned.

FWIW, pointer-returning get_free_page() would not be a flagday change at
all - we only have __get_free_page()/__get_free_pages() right now.  And I'm
not sure that it wouldn't make sense to add void *-returning variants without
underscores - not for bulk conversion of existing callers, but for new
places that want a page.  Because most of the new ones (and new ones keep
appearing; it's not just ancient code) still want a pointer.  And yes, quite
a few of those should be using something else.

Example (went into the tree just three months ago):
static inline void *scif_zalloc(size_t size)
{
        void *ret = NULL;
        size_t align = ALIGN(size, PAGE_SIZE);

        if (align && get_order(align) < MAX_ORDER)
                ret = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
                                               get_order(align));
        return ret ? ret : vzalloc(align);
}

This clearly should be using kzalloc() instead of __get_free_pages() (and
I'm not sure whether the cutoff is right - similar "kmalloc if not too
large, vmalloc otherwise" tends to have cutoff lower than MAX_ORDER;
PAGE_ALLOC_COSTLY_ORDER is more common).  The callers do not look like
they would care about page alignment - at least quite a few of them do
not.

Incidentally, those caller include the following example of lousy naming:
        (*pages)->phys_addr = scif_zalloc(nr_pages * sizeof(dma_addr_t));
First of all, the address is clearly virtual - it's an array!  What's more,
I really wonder whether it's DMA or physical addresses that are stored there.
It's declared as an array of dma_addr_t, but...
                (*pages)->phys_addr[i] =
                        __scif_off_to_dma_addr(window, offset +
                                               (i * PAGE_SIZE));
                (*pages)->phys_addr[i] = scif_get_phys((*pages)->phys_addr[i],
                                                        ep);
and
static phys_addr_t scif_get_phys(phys_addr_t phys, struct scif_endpt *ep)
seems to indicate something fishy going on.

Typechecking for different kinds of addresses is really too weak, and the
amount of casts we have around them doesn't help either ;-/

^ permalink raw reply	[flat|nested] 94+ messages in thread

* Re: [RFC] free_pages stuff
  2015-12-22  1:23       ` Linus Torvalds
@ 2015-12-22  3:10         ` Al Viro
  0 siblings, 0 replies; 94+ messages in thread
From: Al Viro @ 2015-12-22  3:10 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux Kernel Mailing List

On Mon, Dec 21, 2015 at 05:23:11PM -0800, Linus Torvalds wrote:

> And if the code really explicitly wants a page (or set of aligned
> pages) for some vm reason, I suspect having the cast there isn't a bad
> thing. It's clearly not just a random pointer allocation if the bit
> pattern of the pointer matters.
> 
> And yes, most of the people who used to want "unsigned long" have long
> since been converted to take "struct page *" instead, since things
> like the VM wants highmem pages etc.  There's a reason why the
> historical interface returns "unsigned long": it _used_ to be the
> right thing for a lot of code. The fact that there now are more casts
> than not are about changing use patterns, but I don't think that means
> that we should change the calling convention that has a historical
> reason for it.

Umm...  Depends on how early you look.  In 0.01:
fs/exec.c:179:                  if (!(page[i]=get_free_page()))
fs/inode.c:208: if (!(inode->i_size=get_free_page())) {
kernel/fork.c:70:       p = (struct task_struct *) get_free_page();
mm/memory.c:143:                if (!(to_page_table = (unsigned long *) get_free_page()))
mm/memory.c:185:                if (!(tmp=get_free_page()))
mm/memory.c:203:        if (!(new_page=get_free_page()))
mm/memory.c:241:        if (tmp=get_free_page())

the last 3 are "we want struct page *" variety, the rest is "want a pointer"
stuff (exec.c one is copy_strings() and the only use of pages[...] is a cast
to char *, inode.c one is get_pipe_inode() - I guess you didn't want to bother
with adding pipe-specific fields to struct inode at that point and since
->i_size is unused for pipes anyway reused it to keep a pointer to pipe
buffer).  Even then it wasn't the majority.

By 2.0 (still before highmem) the fraction was already _way_ below 50%...

^ permalink raw reply	[flat|nested] 94+ messages in thread

* Re: [RFC] free_pages stuff
  2015-12-22  2:22       ` Al Viro
@ 2015-12-22  8:21         ` Geert Uytterhoeven
  2015-12-22 21:04           ` Al Viro
  0 siblings, 1 reply; 94+ messages in thread
From: Geert Uytterhoeven @ 2015-12-22  8:21 UTC (permalink / raw)
  To: Al Viro; +Cc: Linus Torvalds, Linux Kernel Mailing List

On Tue, Dec 22, 2015 at 3:22 AM, Al Viro <viro@zeniv.linux.org.uk> wrote:
>> And if the code really explicitly wants a page (or set of aligned pages)
>> for some vm reason, I suspect having the cast there isn't a bad thing. It's
>> clearly not just a random pointer allocation if the bit pattern of the
>> pointer matters.
>
> BTW, I'm not sure we don't have code that would assume that
> kmalloc(PAGE_SIZE,...) always returns something PAGE_SIZE-aligned.

Yeah, needs-to-be-PAGE_SIZE-aligned is probably one of the main
reasons of not calling kmalloc().

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 94+ messages in thread

* Re: [RFC] free_pages stuff
  2015-12-22  8:21         ` Geert Uytterhoeven
@ 2015-12-22 21:04           ` Al Viro
  2016-01-05 13:59             ` Michal Hocko
  0 siblings, 1 reply; 94+ messages in thread
From: Al Viro @ 2015-12-22 21:04 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: Linus Torvalds, Linux Kernel Mailing List

On Tue, Dec 22, 2015 at 09:21:14AM +0100, Geert Uytterhoeven wrote:
> On Tue, Dec 22, 2015 at 3:22 AM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> >> And if the code really explicitly wants a page (or set of aligned pages)
> >> for some vm reason, I suspect having the cast there isn't a bad thing. It's
> >> clearly not just a random pointer allocation if the bit pattern of the
> >> pointer matters.
> >
> > BTW, I'm not sure we don't have code that would assume that
> > kmalloc(PAGE_SIZE,...) always returns something PAGE_SIZE-aligned.
> 
> Yeah, needs-to-be-PAGE_SIZE-aligned is probably one of the main
> reasons of not calling kmalloc().

FWIW, looking through the fs/* uses of __get_free_pages() and its wrappers...
	* affs_grow_extcache() - might as well have been kmalloc (and
I'm not sure that fixed PAGE_SIZE is the best size there, actually).
	* afs_mntpt_do_automount() - kmalloc().
	* bfs_dump_imap() - kmalloc().
	* bm_entry_read() - kmalloc(), and might be better off with
single_open-style seqfile.
	* ceph_alloc_readdir_reply_buffer() - kmalloc().
	* configfs fill_write_buffer() - kmalloc(), and it might be worth
a helper similar to memdup_user() that would allocate size + 1 bytes,
copy size bytes from user and put '\0' after them.  There's a lot of
->write() instances open-coding that.
	* configfs fill_read_buffer() - kmalloc().
	* configfs_follow_link() - kmalloc().
	* ext4_calculate_overhead() - kmalloc().
	* fuse_follow_link() - kmalloc().
	* fuse_do_ioctl() - kmalloc(), and it might as well do more accurate
size calculation
	* hfs_mdb_get() - 8Kb kmalloc().
	* isofs_readdir() - kmalloc().
	* jbd2_alloc() - really wants alignment; might make sense to have
3 more private slabs there (they are using kmem_cache_alloc() for sub-page
allocation, with explicit alignments set when creating those; anything
from 8 pages and up goes to vmalloc()).
	* jfs_readdir() - kmalloc().
	* jfs lbmLogInit() - alloc_page().  _This_ is one that really wants
struct page (and uses virt_to_page() to get it after get_zeroed_page()).
	* kernfs_iop_follow_link() - kmalloc().
	* simple_transaction_get() - kmalloc().
	* copy_mount_options() - kmalloc().
	* nfs_do_submount() - kmalloc().
	* nfs_follow_referral() - kmalloc().
	* nfs4_replace_transport() - kmalloc().
	* nfs_show_devname() - kmalloc().
	* nfsd_buffered_readdir() - kmalloc().
	* nilfs_ioctl_wrap_copy() - kmalloc() (and I'm not sure that PAGE_SIZE
is the best possible variant there).
	* fs/ocfs2/dlm/dlmdebug.c ones - kmalloc(), all of them.
	* dlm_alloc_pagevec() - used to allocate hash tables.  kmalloc() will
definitely do, but I would consider using a single kmalloc or vmalloc instead
of an array of page-sized blocks.  Guaranteed extra dereference on every
hash lookup is potentially painful.
	* dlm_migrate_lockres() - kmalloc().
	* dlm_request_all_locks_handler() - kmalloc().
	* ovl_read_symlink() - kmalloc().
	* do_proc_readlink() - kmalloc().
	* proc_pid_cmdline_read() - kmalloc().
	* proc_pid_attr_write() - memdup_user().
	* mem_rw() - kmalloc().
	* environ_read() - kmalloc().
	* dquot_init() - hash allocation; alloc_large_system_hash(), unless
there's something I'm missing...
	* poll_get_entry() - kmalloc(), probably.
	* fs/proc/vmcore.c - interesting one; it allocates a buffer to
store elf headers from crashdump, and everything would be simple, expect
for mmap() support in there.  Which wants it to be page-aligned and uses
remap_pfn_range() from that sucker.

IOW, there is one place that can't live with kmalloc() due to alignment
requirements (jbd2_alloc()), one place that wants struct page * (in jfs)
and one place that wants page-aligned buffer it will feed to remap_pfn_range().
And 35 places that have no good reason for using __get_free_pages() or
its wrappers.

So at least for fs/* the answer is definitely "almost all places
where we are using page allocator would be better off with something
else".

Documentation/which-allocator-should-I-use might be a good idea...  Notes
below are just a skeleton - a lot of details need to be added; in particular,
there should be a part on "I have this kind of address and I want that;
when and how should that be done?", completely missing here.  And there
should be a big scary warning along the lines of "this is NOT an invitation
for a flood of checkpatch-inspired patches"...

Comments, corrections and additions would be very welcome.

1) Most of the time kmalloc() is the right thing to use.
Limitations: alignment is no better than word, not available very early in
bootstrap, allocated memory is physically contiguous, so large allocations
are best avoided.

2) kmem_cache_alloc() allows to specify the alignment at cache creation
time.  Otherwise it's similar to kmalloc().  Normally it's used for
situations where we have a lot of instances of some type and want dynamic
allocation of those.

3) vmalloc() is for large allocations.  They will be page-aligned,
but *not* physically contiguous.  OTOH, large physically contiguous
allocations are generally a bad idea.  Unlike other allocators, there's
no variant that could be used in interrupt; freeing is possible there,
but allocation is not.  Note that non-blocking variant *does* exist -
__vmalloc(size, GFP_ATOMIC, PAGE_KERNEL) can be used in atomic
contexts; it's the interrupt ones that are no-go.

4) if it's very early in bootstrap, alloc_bootmem() and friends
may be the only option.  Rule of the thumb: if it's already printed
Memory: ...../..... available.....
you shouldn't be using that one.  Allocations are physically contiguous
and at that point large physically contiguous allocations are still OK.

5) if you need to allocate memory for DMA, use dma_alloc_coherent()
and friends.  They'll give you both the virtual address for your use
and DMA address refering to the same memory for use by device; do *NOT*
try to derive the latter from the former; use of virt_to_bus() et.al.
is a Bloody Bad Idea(tm).

6) if you need a reference to struct page, use alloc_page/alloc_pages.

7) in some cases (page tables, for the most obvious example), __get_free_page()
and friends might be the right answer.  In principle, it's case (6), but
it returns page_address(page) instead of the page itself.  Historically that
was the first API introduced, so a _lot_ of places that should've been using
something else ended up using that.  Do not assume that being lower level
makes it faster than e.g. kmalloc() - this is simply not true.

^ permalink raw reply	[flat|nested] 94+ messages in thread

* Re: [RFC] free_pages stuff
  2015-12-22 21:04           ` Al Viro
@ 2016-01-05 13:59             ` Michal Hocko
  2016-01-05 15:26               ` Al Viro
  0 siblings, 1 reply; 94+ messages in thread
From: Michal Hocko @ 2016-01-05 13:59 UTC (permalink / raw)
  To: Al Viro
  Cc: Geert Uytterhoeven, Linus Torvalds, Linux Kernel Mailing List,
	linux-mm

[CCing linux-mm]

On Tue 22-12-15 21:04:35, Al Viro wrote:
[...]
> Documentation/which-allocator-should-I-use might be a good idea...  Notes
> below are just a skeleton - a lot of details need to be added; in particular,
> there should be a part on "I have this kind of address and I want that;
> when and how should that be done?", completely missing here.  And there
> should be a big scary warning along the lines of "this is NOT an invitation
> for a flood of checkpatch-inspired patches"...
> 
> Comments, corrections and additions would be very welcome.

FWIW I think this is a very good idea. The current form is good enough
IMHO.

> 1) Most of the time kmalloc() is the right thing to use.
> Limitations: alignment is no better than word, not available very early in
> bootstrap, allocated memory is physically contiguous, so large allocations
> are best avoided.
> 
> 2) kmem_cache_alloc() allows to specify the alignment at cache creation
> time.  Otherwise it's similar to kmalloc().  Normally it's used for
> situations where we have a lot of instances of some type and want dynamic
> allocation of those.
> 
> 3) vmalloc() is for large allocations.  They will be page-aligned,
> but *not* physically contiguous.  OTOH, large physically contiguous
> allocations are generally a bad idea.  Unlike other allocators, there's
> no variant that could be used in interrupt; freeing is possible there,
> but allocation is not.  Note that non-blocking variant *does* exist -
> __vmalloc(size, GFP_ATOMIC, PAGE_KERNEL) can be used in atomic
> contexts; it's the interrupt ones that are no-go.

It is also hardcoded GFP_KERNEL context so a usage from NOFS context
needs a special treatment.

> 4) if it's very early in bootstrap, alloc_bootmem() and friends
> may be the only option.  Rule of the thumb: if it's already printed
> Memory: ...../..... available.....
> you shouldn't be using that one.  Allocations are physically contiguous
> and at that point large physically contiguous allocations are still OK.
> 
> 5) if you need to allocate memory for DMA, use dma_alloc_coherent()
> and friends.  They'll give you both the virtual address for your use
> and DMA address refering to the same memory for use by device; do *NOT*
> try to derive the latter from the former; use of virt_to_bus() et.al.
> is a Bloody Bad Idea(tm).
> 
> 6) if you need a reference to struct page, use alloc_page/alloc_pages.
> 
> 7) in some cases (page tables, for the most obvious example), __get_free_page()
> and friends might be the right answer.  In principle, it's case (6), but
> it returns page_address(page) instead of the page itself.  Historically that
> was the first API introduced, so a _lot_ of places that should've been using
> something else ended up using that.  Do not assume that being lower level
> makes it faster than e.g. kmalloc() - this is simply not true.

-- 
Michal Hocko
SUSE Labs

^ permalink raw reply	[flat|nested] 94+ messages in thread

* Re: [RFC] free_pages stuff
  2016-01-05 13:59             ` Michal Hocko
@ 2016-01-05 15:26               ` Al Viro
  2016-01-05 15:42                 ` Michal Hocko
  0 siblings, 1 reply; 94+ messages in thread
From: Al Viro @ 2016-01-05 15:26 UTC (permalink / raw)
  To: Michal Hocko
  Cc: Geert Uytterhoeven, Linus Torvalds, Linux Kernel Mailing List,
	linux-mm

On Tue, Jan 05, 2016 at 02:59:03PM +0100, Michal Hocko wrote:

> > 3) vmalloc() is for large allocations.  They will be page-aligned,
> > but *not* physically contiguous.  OTOH, large physically contiguous
> > allocations are generally a bad idea.  Unlike other allocators, there's
> > no variant that could be used in interrupt; freeing is possible there,
> > but allocation is not.  Note that non-blocking variant *does* exist -
> > __vmalloc(size, GFP_ATOMIC, PAGE_KERNEL) can be used in atomic
> > contexts; it's the interrupt ones that are no-go.

The last sentence I'd put into that part was complete crap...

> It is also hardcoded GFP_KERNEL context so a usage from NOFS context
> needs a special treatment.

... in part because of this.  GFP_ATOMIC __vmalloc() will be anything but,
and the only caller passing that is almost certainly bogus.  As for NOFS/NOIO,
I wonder if we should apply that special treatment inside __vmalloc_area_node
rather than in callers; see the current thread on linux-mm for details...

Another interesting issue is __GFP_HIGHMEM meaning for kmalloc and __vmalloc
resp. (should never be passed to kmalloc, should almost always be passed
to __vmalloc - the former needs pages mapped in kernel space, the latter
probably never needs a separate kernel alias for the data pages, to such
degree that I'm not sure if we shouldn't _force_ __GFP_HIGHMEM for data pages
allocation in __vmalloc_area_node())

> > 4) if it's very early in bootstrap, alloc_bootmem() and friends
> > may be the only option.  Rule of the thumb: if it's already printed
> > Memory: ...../..... available.....
> > you shouldn't be using that one.  Allocations are physically contiguous
> > and at that point large physically contiguous allocations are still OK.

Probably needs at least some discussion of memblock vs. bootmem APIs.

^ permalink raw reply	[flat|nested] 94+ messages in thread

* Re: [RFC] free_pages stuff
  2016-01-05 15:26               ` Al Viro
@ 2016-01-05 15:42                 ` Michal Hocko
  0 siblings, 0 replies; 94+ messages in thread
From: Michal Hocko @ 2016-01-05 15:42 UTC (permalink / raw)
  To: Al Viro
  Cc: Geert Uytterhoeven, Linus Torvalds, Linux Kernel Mailing List,
	linux-mm

On Tue 05-01-16 15:26:02, Al Viro wrote:
> On Tue, Jan 05, 2016 at 02:59:03PM +0100, Michal Hocko wrote:
> 
> > > 3) vmalloc() is for large allocations.  They will be page-aligned,
> > > but *not* physically contiguous.  OTOH, large physically contiguous
> > > allocations are generally a bad idea.  Unlike other allocators, there's
> > > no variant that could be used in interrupt; freeing is possible there,
> > > but allocation is not.  Note that non-blocking variant *does* exist -
> > > __vmalloc(size, GFP_ATOMIC, PAGE_KERNEL) can be used in atomic
> > > contexts; it's the interrupt ones that are no-go.
> 
> The last sentence I'd put into that part was complete crap...
> 
> > It is also hardcoded GFP_KERNEL context so a usage from NOFS context
> > needs a special treatment.
> 
> ... in part because of this.  GFP_ATOMIC __vmalloc() will be anything but,
> and the only caller passing that is almost certainly bogus.

Agreed as just replied in the other email thread which I have noticed
only now.

> As for NOFS/NOIO,
> I wonder if we should apply that special treatment inside __vmalloc_area_node
> rather than in callers; see the current thread on linux-mm for details...

That would make a lot of sense to me. Spreading the _special_ treatment
all over the kernel is certainly worse.
 
> Another interesting issue is __GFP_HIGHMEM meaning for kmalloc and __vmalloc
> resp. (should never be passed to kmalloc, should almost always be passed
> to __vmalloc - the former needs pages mapped in kernel space, the latter
> probably never needs a separate kernel alias for the data pages, to such
> degree that I'm not sure if we shouldn't _force_ __GFP_HIGHMEM for data pages
> allocation in __vmalloc_area_node())

I would have to think about this one some more. Let's not fragment the
discussion and continue in that email thread:
http://lkml.kernel.org/r/20160103071246.GK9938%40ZenIV.linux.org.uk

-- 
Michal Hocko
SUSE Labs

^ permalink raw reply	[flat|nested] 94+ messages in thread

end of thread, other threads:[~2016-01-05 15:42 UTC | newest]

Thread overview: 94+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-21 23:46 [RFC] free_pages stuff Al Viro
2015-12-21 23:46 ` [POC][PATCH 01/83] switch free_page() from unsigned long to const void * Al Viro
2015-12-21 23:46 ` [POC][PATCH 02/83] switch free_pages() " Al Viro
2015-12-21 23:46 ` [POC][PATCH 03/83] switch get_zeroed_page() to returning " Al Viro
2015-12-21 23:46 ` [POC][PATCH 04/83] kill unused {get,free}_user_page() Al Viro
2015-12-21 23:46 ` [POC][PATCH 05/83] switch copy_mount_options to storing void * instead of unsigned long Al Viro
2015-12-21 23:46 ` [POC][PATCH 06/83] drivers/net/wireless/libertas/debugfs.c: get rid of pointless casts Al Viro
2015-12-21 23:46 ` [POC][PATCH 07/83] drivers/net/wireless/mwifiex/debugfs.c: " Al Viro
2015-12-21 23:46 ` [POC][PATCH 08/83] affs_evict_inode(): " Al Viro
2015-12-21 23:46 ` [POC][PATCH 09/83] configfs_follow_link(): " Al Viro
2015-12-21 23:46 ` [POC][PATCH 10/83] kernfs_iop_follow_link(): " Al Viro
2015-12-21 23:46 ` [POC][PATCH 11/83] sound/oss/vidc: keep dma_buf[] as pointers Al Viro
2015-12-21 23:46 ` [POC][PATCH 12/83] drivers/tty: get rid of pointless casts Al Viro
2015-12-21 23:46 ` [POC][PATCH 13/83] rds: keep pointers in ->m_page_addrs[] Al Viro
2015-12-21 23:46 ` [POC][PATCH 14/83] proc_dev_atm_read(): get rid of pointless casts Al Viro
2015-12-21 23:46 ` [POC][PATCH 15/83] qib get_map_page(): " Al Viro
2015-12-21 23:46 ` [POC][PATCH 16/83] user_namespace: " Al Viro
2015-12-21 23:46 ` [POC][PATCH 17/83] ftrace: " Al Viro
2015-12-21 23:46 ` [POC][PATCH 18/83] sysctl: " Al Viro
2015-12-21 23:46 ` [POC][PATCH 19/83] xenstored_local_init(): " Al Viro
2015-12-21 23:46 ` [POC][PATCH 20/83] staging/rdma: " Al Viro
2015-12-21 23:46 ` [POC][PATCH 21/83] c6x: remove unused macros Al Viro
2015-12-21 23:46 ` [POC][PATCH 22/83] [davinci] ccdc_update_raw_params() frees the wrong thing Al Viro
2015-12-21 23:46 ` [POC][PATCH 23/83] fd_dma_mem_free(): pass address as void * instead of unsigned long Al Viro
2015-12-21 23:46 ` [POC][PATCH 24/83] ppc: keep ->hpt_virt as a pointer Al Viro
2015-12-21 23:46 ` [POC][PATCH 25/83] dma_4u_alloc_coherent(): don't mix virtual and physical addresses Al Viro
2015-12-21 23:46 ` [POC][PATCH 26/83] dma_4v_alloc_coherent(): " Al Viro
2015-12-21 23:47 ` [POC][PATCH 27/83] new helper: get_dma_pages() Al Viro
2015-12-21 23:47 ` [POC][PATCH 28/83] make fd_dma_mem_alloc/nodma_mem_alloc return a pointer Al Viro
2015-12-21 23:47 ` [POC][PATCH 29/83] switch the remaining users of __get_dma_pages() to get_dma_pages() Al Viro
2015-12-21 23:47 ` [POC][PATCH 30/83] sparc: get rid of pointless casts Al Viro
2015-12-21 23:47 ` [POC][PATCH 31/83] efficeon: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 32/83] lguest: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 33/83] drivers/pci: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 34/83] drivers/s390: ger " Al Viro
2015-12-21 23:47 ` [POC][PATCH 35/83] s390 kvm: get " Al Viro
2015-12-21 23:47 ` [POC][PATCH 36/83] pcibios: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 37/83] ste_dma40: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 38/83] usb_mon: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 39/83] gnttab_end_foreign_access(): switch the last argument to void * Al Viro
2015-12-21 23:47 ` [POC][PATCH 40/83] nios2: dma_free_coherent(): get rid of pointless casts Al Viro
2015-12-21 23:47 ` [POC][PATCH 41/83] hsi: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 42/83] simserial: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 43/83] arm64 vdso: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 44/83] cris free_init_page(): switch to __free_page() Al Viro
2015-12-21 23:47 ` [POC][PATCH 45/83] arm: switch kvm_arm_hyp_stack_page to void * Al Viro
2015-12-21 23:47 ` [POC][PATCH 46/83] frv consistent_alloc(): switch page " Al Viro
2015-12-21 23:47 ` [POC][PATCH 47/83] ia64: uncached_add_chunk(): switch to __free_pages() Al Viro
2015-12-21 23:47 ` [POC][PATCH 48/83] jfs_readdir(): make dirent_buf a pointer Al Viro
2015-12-21 23:47 ` [POC][PATCH 49/83] get rid of casts in alloc_exact stuff Al Viro
2015-12-21 23:47 ` [POC][PATCH 50/83] s390 cmm: get rid of pointless casts Al Viro
2015-12-21 23:47 ` [POC][PATCH 51/83] microblaze consistent_alloc(): " Al Viro
2015-12-21 23:47 ` [POC][PATCH 52/83] devm_{get_}free_pages(): switch to pointers Al Viro
2015-12-21 23:47 ` [POC][PATCH 53/83] cavium: (partially) get rid of cargo-culting in allocator Al Viro
2015-12-21 23:47 ` [POC][PATCH 54/83] um: store stacks as pointers Al Viro
2015-12-21 23:47 ` [POC][PATCH 55/83] sh: get rid of pointless casts Al Viro
2015-12-21 23:47 ` [POC][PATCH 56/83] amd_gart_64: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 57/83] iwlegacy: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 58/83] iwlwifi: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 59/83] add pointer-returning variants of __get_free_pages/__get_free_page Al Viro
2015-12-21 23:47 ` [POC][PATCH 60/83] switch obvious cases to get_free_pages() Al Viro
2015-12-21 23:47 ` [POC][PATCH 61/83] switch obvious cases to get_free_page() Al Viro
2015-12-21 23:47 ` [POC][PATCH 62/83] m68k: switch pte_alloc_one_kernel() " Al Viro
2015-12-21 23:47 ` [POC][PATCH 63/83] switch kvmppc_core_vcpu_create_pr() " Al Viro
2015-12-21 23:47 ` [POC][PATCH 64/83] drivers/video/fbdev: switch to get_free_pages() Al Viro
2015-12-21 23:47 ` [POC][PATCH 65/83] um: switch to get_free_page() Al Viro
2015-12-21 23:47 ` [POC][PATCH 66/83] switch xen_get_swiotlb_free_pages() to returning a pointer Al Viro
2015-12-21 23:47 ` [POC][PATCH 67/83] mn10300 dma_alloc_coherent(): switch to get_free_pages() Al Viro
2015-12-21 23:47 ` [POC][PATCH 68/83] switch ps3_dma_map() and ps3_dma_region_ops->map() instances to physical address Al Viro
2015-12-21 23:47 ` [POC][PATCH 69/83] ps3_alloc_coherent(): get rid of pointless casts Al Viro
2015-12-21 23:47 ` [POC][PATCH 70/83] s390_dma_alloc(): page_to_phys() result is always a multiple of PAGE_SIZE Al Viro
2015-12-21 23:47 ` [POC][PATCH 71/83] s390_dma_alloc(): use page_address() Al Viro
2015-12-21 23:47 ` [POC][PATCH 72/83] [powerpc] switch cmm_page_array->pages[] to pointers Al Viro
2015-12-21 23:47 ` [POC][PATCH 73/83] niu.c: get rid of pointless casts Al Viro
2015-12-21 23:47 ` [POC][PATCH 74/83] [s390] switch pcpu_alloc_lowcore() to get_free_page() Al Viro
2015-12-21 23:47 ` [POC][PATCH 75/83] kill __get_free_page() Al Viro
2015-12-21 23:47 ` [POC][PATCH 76/83] [mips, s390, score] turn empty_zero_page into pointer Al Viro
2015-12-21 23:47 ` [POC][PATCH 77/83] sparc: switch to get_free_pages() Al Viro
2015-12-21 23:47 ` [POC][PATCH 78/83] x86: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 79/83] s390: turn suspend_zero_pages into a pointer Al Viro
2015-12-21 23:47 ` [POC][PATCH 80/83] [sun3] try to sort dvma types out Al Viro
2015-12-21 23:47 ` [POC][PATCH 81/83] sba_iommu: get rid of pointless casts Al Viro
2015-12-21 23:47 ` [POC][PATCH 82/83] media/platform/omap: " Al Viro
2015-12-21 23:47 ` [POC][PATCH 83/83] nios2: " Al Viro
2015-12-22  0:03 ` [RFC] free_pages stuff Linus Torvalds
2015-12-22  1:04   ` Al Viro
     [not found]     ` <CA+55aFy9NrV_RnziN9z3p5O6rv1A0mirhLD0hL7Wrb77+YyBeg@mail.gmail.com>
2015-12-22  1:23       ` Linus Torvalds
2015-12-22  3:10         ` Al Viro
2015-12-22  2:22       ` Al Viro
2015-12-22  8:21         ` Geert Uytterhoeven
2015-12-22 21:04           ` Al Viro
2016-01-05 13:59             ` Michal Hocko
2016-01-05 15:26               ` Al Viro
2016-01-05 15:42                 ` Michal Hocko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox