From a226c74609b12cac905d06ec97a077bb2633e8a8 Mon Sep 17 00:00:00 2001 From: Justus Winter <4winter@informatik.uni-hamburg.de> Date: Thu, 28 Nov 2013 10:43:18 +0100 Subject: libdiskfs: add payload-aware intrans functions * libdiskfs/diskfs.h (diskfs_begin_using_protid_payload): New function. (diskfs_begin_using_control_payload): Likewise. (diskfs_begin_using_bootinfo_payload): Likewise. * libdiskfs/fsmutations.h: Add mutators. --- libdiskfs/diskfs.h | 29 +++++++++++++++++++++++++++++ libdiskfs/fsmutations.h | 5 +++++ 2 files changed, 34 insertions(+) diff --git a/libdiskfs/diskfs.h b/libdiskfs/diskfs.h index e59ba996..28182254 100644 --- a/libdiskfs/diskfs.h +++ b/libdiskfs/diskfs.h @@ -833,8 +833,14 @@ error_t diskfs_start_protid (struct peropen *po, struct protid **cred); void diskfs_finish_protid (struct protid *cred, struct iouser *user); extern struct protid * diskfs_begin_using_protid_port (file_t port); +extern struct protid * +diskfs_begin_using_protid_payload (unsigned long payload); extern struct diskfs_control * diskfs_begin_using_control_port (fsys_t port); +extern struct diskfs_control * +diskfs_begin_using_control_port_payload (unsigned long payload); extern struct bootinfo *diskfs_begin_using_bootinfo_port (exec_startup_t port); +struct bootinfo * +diskfs_begin_using_bootinfo_payload (unsigned long payload); extern void diskfs_end_using_protid_port (struct protid *cred); extern void diskfs_end_using_control_port (struct diskfs_control *cred); @@ -851,6 +857,14 @@ diskfs_begin_using_protid_port (file_t port) return ports_lookup_port (diskfs_port_bucket, port, diskfs_protid_class); } +DISKFS_EXTERN_INLINE struct protid * +diskfs_begin_using_protid_payload (unsigned long payload) +{ + return ports_lookup_payload (diskfs_port_bucket, + payload, + diskfs_protid_class); +} + /* And for the fsys interface. */ DISKFS_EXTERN_INLINE struct diskfs_control * diskfs_begin_using_control_port (fsys_t port) @@ -858,6 +872,14 @@ diskfs_begin_using_control_port (fsys_t port) return ports_lookup_port (diskfs_port_bucket, port, NULL); } +DISKFS_EXTERN_INLINE struct diskfs_control * +diskfs_begin_using_control_port_payload (unsigned long payload) +{ + return ports_lookup_payload (diskfs_port_bucket, + payload, + NULL); +} + /* And for the exec_startup interface. */ DISKFS_EXTERN_INLINE struct bootinfo * diskfs_begin_using_bootinfo_port (exec_startup_t port) @@ -865,6 +887,13 @@ diskfs_begin_using_bootinfo_port (exec_startup_t port) return ports_lookup_port (diskfs_port_bucket, port, diskfs_execboot_class); } +DISKFS_EXTERN_INLINE struct bootinfo * +diskfs_begin_using_bootinfo_payload (unsigned long payload) +{ + return ports_lookup_payload (diskfs_port_bucket, + payload, + diskfs_execboot_class); +} /* Called by MiG after server routines have been run; this balances begin_using_protid_port, and is arranged for the io diff --git a/libdiskfs/fsmutations.h b/libdiskfs/fsmutations.h index 3f9362b9..c2167c64 100644 --- a/libdiskfs/fsmutations.h +++ b/libdiskfs/fsmutations.h @@ -18,12 +18,15 @@ /* Only CPP macro definitions should go in this file. */ #define FILE_INTRAN protid_t diskfs_begin_using_protid_port (file_t) +#define FILE_INTRAN_PAYLOAD protid_t diskfs_begin_using_protid_payload #define FILE_DESTRUCTOR diskfs_end_using_protid_port (protid_t) #define IO_INTRAN protid_t diskfs_begin_using_protid_port (io_t) +#define IO_INTRAN_PAYLOAD protid_t diskfs_begin_using_protid_payload #define IO_DESTRUCTOR diskfs_end_using_protid_port (protid_t) #define FSYS_INTRAN control_t diskfs_begin_using_control_port (fsys_t) +#define FSYS_INTRAN_PAYLOAD control_t diskfs_begin_using_control_port_payload #define FSYS_DESTRUCTOR diskfs_end_using_control_port (control_t) #define FILE_IMPORTS import "libdiskfs/priv.h"; @@ -33,6 +36,8 @@ #define EXEC_STARTUP_INTRAN \ bootinfo_t diskfs_begin_using_bootinfo_port (exec_startup_t) +#define EXEC_STARTUP_INTRAN_PAYLOAD \ + bootinfo_t diskfs_begin_using_bootinfo_payload #define EXEC_STARTUP_DESTRUCTOR \ diskfs_end_using_bootinfo (bootinfo_t) #define EXEC_STARTUP_IMPORTS \ -- cgit v1.2.3