RAR Handler (memrar) Driver TODO Items
======================================

Maintainer: Ossama Othman <ossama.othman@intel.com>

memrar.h
--------
1. This header exposes the driver's user space and kernel space
   interfaces.  It should be moved to <linux/rar/memrar.h>, or
   something along those lines, when this memrar driver is moved out
   of `staging'.
     a. It would be ideal if staging/rar_register/rar_register.h was
        moved to the same directory.

memrar_allocator.[ch]
---------------------
1. Address potential fragmentation issues with the memrar_allocator.

2. Hide struct memrar_allocator details/fields.  They need not be
   exposed to the user.
     a. Forward declare struct memrar_allocator.
     b. Move all three struct definitions to `memrar_allocator.c'
        source file.
     c. Add a memrar_allocator_largest_free_area() function, or
        something like that to get access to the value of the struct
        memrar_allocator "largest_free_area" field.  This allows the
        struct memrar_allocator fields to be completely hidden from
        the user.  The memrar_handler code really only needs this for
        statistic gathering on-demand.
     d. Do the same for the "capacity" field as the
        "largest_free_area" field.

3. Move memrar_allocator.* to kernel `lib' directory since it is HW
   neutral.
     a. Alternatively, use lib/genalloc.c instead.
     b. A kernel port of Doug Lea's malloc() implementation may also
        be an option.

memrar_handler.c
----------------
1. Split user space interface (ioctl code) from core/kernel code,
   e.g.:
     memrar_handler.c -> memrar_core.c, memrar_user.c
