Changeset 46fc2f9 in mainline


Ignore:
Timestamp:
2006-05-27T22:57:21Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6212095
Parents:
00b595b
Message:

Added 256K slab, so that AMD can boot (until ELF loader is fixed).
Added AS_AREA_RECV so that the caller can receive AS_AREA.

Location:
generic
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • generic/include/ipc/ipc.h

    r00b595b r46fc2f9  
    4343                                        * userspace, will be discarded */
    4444#define IPC_CALL_FORWARDED      (1<<3) /* Call was forwarded */
    45 #define IPC_CALL_CONN_ME_TO     (1<<4) /* Identify connect_me_to */
     45#define IPC_CALL_CONN_ME_TO     (1<<4) /* Identify connect_me_to answer */
    4646#define IPC_CALL_NOTIF          (1<<5) /* Interrupt notification */
    4747
     
    120120/** Interrupt notification */
    121121#define IPC_M_INTERRUPT         4
     122
    122123/** Send as_area over IPC
    123  * - ARG2 - src base address
    124  * - ARG3 - size of src as(filled automatically by kernel)
     124 * - ARG1 - src base address
     125 * - ARG2 - size of src as(filled automatically by kernel)
     126 * - ARG3 - flags of the area being sent
    125127 * - on answer ARG1 - dst base adress
    126128 */
    127129#define IPC_M_AS_AREA_SEND      5
     130
     131/** Get as_area over IPC
     132 * - ARG1 - Where the area will be mapped
     133 * - ARG2 - Expected size of area
     134 * - ARG3 - Requested rights for the area
     135 * on answer - the server sets ARG1 as src as address of the as_area
     136 * to be shared
     137 *
     138 *
     139 */
     140#define IPC_M_AS_AREA_RECV      6
    128141
    129142
  • generic/include/mm/as.h

    r00b595b r46fc2f9  
    169169extern void as_switch(as_t *old, as_t *new);
    170170extern void as_free(as_t *as);
    171 extern int as_area_share(as_t *src_as, __address src_base, size_t acc_size,
    172         __address dst_base, int dst_flags_mask);
     171int as_area_share(as_t *src_as, __address src_base, size_t acc_size,
     172                  as_t *dst_as, __address dst_base, int dst_flags_mask);
    173173extern size_t as_get_size(__address base);
    174174extern int used_space_insert(as_area_t *a, __address page, count_t count);
  • generic/include/mm/slab.h

    r00b595b r46fc2f9  
    3939
    4040/** Maximum size to be allocated by malloc */
    41 #define SLAB_MAX_MALLOC_W 17
     41#define SLAB_MAX_MALLOC_W 18
    4242
    4343/** Initial Magazine size (TODO: dynamically growing magazines) */
  • generic/src/ipc/sysipc.c

    r00b595b r46fc2f9  
    6565static inline int is_forwardable(__native method)
    6666{
    67         if (method == IPC_M_PHONE_HUNGUP || method == IPC_M_AS_AREA_SEND)
     67        if (method == IPC_M_PHONE_HUNGUP || method == IPC_M_AS_AREA_SEND \
     68            || method == IPC_M_AS_AREA_RECV)
    6869                return 0; /* This message is meant only for the receiver */
    6970        return 1;
     
    8687        if (IPC_GET_METHOD(call->data) == IPC_M_AS_AREA_SEND)
    8788                return 1;
    88         return 0;
    89 }
    90 
    91 /** Interpret process answer as control information */
     89        if (IPC_GET_METHOD(call->data) == IPC_M_AS_AREA_RECV)
     90                return 1;
     91        return 0;
     92}
     93
     94/** Interpret process answer as control information
     95 *
     96 * This function is called directly after sys_ipc_answer
     97 */
    9298static inline int answer_preprocess(call_t *answer, ipc_data_t *olddata)
    9399{
     
    140146                       
    141147                        return as_area_share(as, IPC_GET_ARG1(*olddata), IPC_GET_ARG2(*olddata),
    142                                 IPC_GET_ARG1(answer->data), IPC_GET_ARG3(*olddata));
     148                                             AS, IPC_GET_ARG1(answer->data), IPC_GET_ARG3(*olddata));
     149                }
     150        } else if (IPC_GET_METHOD(*olddata) == IPC_M_AS_AREA_RECV) {
     151                if (!IPC_GET_RETVAL(answer->data)) {
     152                        ipl_t ipl;
     153                        as_t *as;
     154                       
     155                        ipl = interrupts_disable();
     156                        spinlock_lock(&answer->sender->lock);
     157                        as = answer->sender->as;
     158                        spinlock_unlock(&answer->sender->lock);
     159                        interrupts_restore(ipl);
     160                       
     161                        return as_area_share(AS, IPC_GET_ARG1(answer->data), IPC_GET_ARG2(*olddata),
     162                                             as, IPC_GET_ARG1(*olddata), IPC_GET_ARG3(*olddata));
    143163                }
    144164        }
  • generic/src/mm/as.c

    r00b595b r46fc2f9  
    457457 * @param src_base Base address of the source address space area.
    458458 * @param acc_size Expected size of the source area.
     459 * @param dst_as Pointer to destination address space.
    459460 * @param dst_base Target base address.
    460461 * @param dst_flags_mask Destination address space area flags mask.
     
    468469 */
    469470int as_area_share(as_t *src_as, __address src_base, size_t acc_size,
    470                   __address dst_base, int dst_flags_mask)
     471                  as_t *dst_as, __address dst_base, int dst_flags_mask)
    471472{
    472473        ipl_t ipl;
     
    544545         * to support sharing in less privileged mode.
    545546         */
    546         dst_area = as_area_create(AS, src_flags & dst_flags_mask, src_size, dst_base,
     547        dst_area = as_area_create(dst_as, src_flags & dst_flags_mask, src_size, dst_base,
    547548                                  AS_AREA_ATTR_PARTIAL, src_backend, &src_backend_data);
    548549        if (!dst_area) {
  • generic/src/mm/slab.c

    r00b595b r46fc2f9  
    128128        "malloc-256","malloc-512","malloc-1K","malloc-2K",
    129129        "malloc-4K","malloc-8K","malloc-16K","malloc-32K",
    130         "malloc-64K","malloc-128K"
     130        "malloc-64K","malloc-128K","malloc-256K"
    131131};
    132132
Note: See TracChangeset for help on using the changeset viewer.