Merge branch 'mapping_caps'
authorSimon Gerber <simon.gerber@inf.ethz.ch>
Wed, 9 Dec 2015 17:08:38 +0000 (18:08 +0100)
committerSimon Gerber <simon.gerber@inf.ethz.ch>
Wed, 9 Dec 2015 17:08:38 +0000 (18:08 +0100)
Closes T187.

This merge implements mapping capabilities that replace the need for
creating copies of Frame capabilitites when mapping the same Frame
capability multiple times.  Mapping capabilities are derived from
the type that is mapped (e.g.  Frame_Mapping for Frame capabilities)
and are created in a provided, free capability slot on a VNode map
invocation.  Further the VNode unmap invocation now takes a VNode
and a Mapping capability as it's arguments.

Further changes in this merge are:
 * 64 byte capabilities on all supported architectures and platforms
 * The address property of a capability can be defined recursively

Signed-off-by: Simon Gerber <simon.gerber@inf.ethz.ch>

1  2 
errors/errno.fugu
include/arch/x86_32/barrelfish/invocations_arch.h
include/barrelfish_kpi/capabilities.h
kernel/arch/arm/syscall.c
kernel/arch/armv8/syscall.c
kernel/arch/x86_32/syscall.c
lib/barrelfish/target/x86_32/pmap_target.c
lib/spawndomain/spawn.c
platforms/Hakefile
usr/monitor/include/arch/x86_32/monitor_invocations_arch.h

Simple merge
@@@ -253,7 -327,7 +326,6 @@@ enum dispatcher_cmd 
   */
  enum frame_cmd {
      FrameCmd_Identify,      ///< Return physical address of frame
-     FrameCmd_ModifyFlags,   ///< Modify flags for (part of) the mapped region of frame
 -    FrameCmd_SCC_Identify,  ///< Return MC route to frame
  };
  
  /**
Simple merge
Simple merge
@@@ -511,27 -563,32 +540,6 @@@ static struct sysret handle_frame_ident
      };
  }
  
- static struct sysret handle_frame_modify_flags(struct capability *to,
-                                                int cmd, uintptr_t *args)
- {
-     // Modify flags of (part of) mapped region of frame
-     assert(to->type == ObjType_Frame || to->type == ObjType_DevFrame);
-     // unpack arguments
-     size_t offset = args[0]; // in pages; of first page to modify from first
-                              // page in mapped region
-     size_t pages  = args[1]; // #pages to modify
-     size_t flags  = args[2]; // new flags
-     genvaddr_t va = args[3]; // virtual addr hint
-     page_mappings_modify_flags(to, offset, pages, flags, va);
-     return (struct sysret) {
-         .error = SYS_ERR_OK,
-         .value = 0,
-     };
- }
 -#ifdef __scc__
 -static struct sysret handle_frame_scc_identify(struct capability *to,
 -                                               int cmd, uintptr_t *args)
 -{
 -    // Return with physical base address of frame
 -    // XXX: pack size into bottom bits of base address
 -    assert(to->type == ObjType_Frame || to->type == ObjType_DevFrame);
 -    assert((to->u.frame.base & BASE_PAGE_MASK) == 0);
 -    assert(to->u.frame.bits < BASE_PAGE_SIZE);
 -
 -    uint8_t route, subdest;
 -    uint16_t addrbits;
 -
 -    errval_t err = rck_get_route(to->u.frame.base, 1 << to->u.frame.bits,
 -                                 &route, &subdest, &addrbits);
 -    if(err_is_fail(err)) {
 -        return SYSRET(err);
 -    }
 -
 -    return (struct sysret) {
 -        .error = SYS_ERR_OK,
 -        .value = (addrbits << 16) | (subdest << 8) | route,
 -    };
 -}
 -#endif
 -
  static struct sysret handle_io(struct capability *to, int cmd, uintptr_t *args)
  {
      uint32_t    port = args[0];
@@@ -787,11 -871,15 +795,9 @@@ static invocation_handler_t invocations
      },
      [ObjType_Frame] = {
          [FrameCmd_Identify] = handle_frame_identify,
      },
      [ObjType_DevFrame] = {
          [FrameCmd_Identify] = handle_frame_identify,
-         [FrameCmd_ModifyFlags] = handle_frame_modify_flags,
 -#ifdef __scc__
 -        [FrameCmd_SCC_Identify] = handle_frame_scc_identify
 -#endif
      },
      [ObjType_CNode] = {
          [CNodeCmd_Copy]   = handle_copy,
Simple merge
Simple merge