Lines Matching refs:kmsg

178 			ipc_kmsg_t      kmsg,
294 ipc_kmsg_t kmsg,
297 kprintf("%s kmsg=%p:\n", str, kmsg);
299 kmsg->ikm_next,
300 kmsg->ikm_prev,
301 kmsg->ikm_size);
303 ipc_msg_print64(kmsg->ikm_header);
475 #define DEBUG_IPC_KMSG_PRINT(kmsg,string) \
477 ipc_kmsg_print64(kmsg, string); \
484 #define DEBUG_IPC_KMSG_PRINT(kmsg,string)
542 ipc_kmsg_t kmsg);
545 ipc_kmsg_t kmsg,
550 ipc_kmsg_t kmsg,
557 ipc_kmsg_t kmsg,
582 ipc_kmsg_t kmsg;
627 kmsg = cache->entries[--i];
630 ikm_check_init(kmsg, max_expanded_size);
631 ikm_set_header(kmsg, msg_and_trailer_size);
632 return (kmsg);
635 kmsg = (ipc_kmsg_t)zalloc(ipc_kmsg_zone);
637 kmsg = (ipc_kmsg_t)kalloc(ikm_plus_overhead(max_expanded_size));
640 if (kmsg != IKM_NULL) {
641 ikm_init(kmsg, max_expanded_size);
642 ikm_set_header(kmsg, msg_and_trailer_size);
645 return(kmsg);
662 ipc_kmsg_t kmsg)
664 mach_msg_size_t size = kmsg->ikm_size;
668 if (kmsg->ikm_sender != NULL) {
669 task_deallocate(kmsg->ikm_sender);
670 kmsg->ikm_sender = NULL;
679 port = ikm_prealloc_inuse_port(kmsg);
682 ikm_prealloc_clear_inuse(kmsg, port);
683 if (ip_active(port) && (port->ip_premsg == kmsg)) {
696 if (kmsg->ikm_size == IKM_SAVED_MSG_SIZE) {
703 cache->entries[i] = kmsg;
709 zfree(ipc_kmsg_zone, kmsg);
712 kfree(kmsg, ikm_plus_overhead(size));
719 * Enqueue a kmsg.
725 ipc_kmsg_t kmsg)
727 ipc_kmsg_enqueue_macro(queue, kmsg);
733 * Dequeue and return a kmsg.
753 * Pull a kmsg out of a queue.
759 ipc_kmsg_t kmsg)
765 next = kmsg->ikm_next;
766 prev = kmsg->ikm_prev;
768 if (next == kmsg) {
769 assert(prev == kmsg);
770 assert(queue->ikmq_base == kmsg);
774 if (queue->ikmq_base == kmsg)
781 assert((kmsg->ikm_next = IKM_BOGUS) == IKM_BOGUS);
782 assert((kmsg->ikm_prev = IKM_BOGUS) == IKM_BOGUS);
788 * Return the kmsg following the given kmsg.
795 ipc_kmsg_t kmsg)
801 next = kmsg->ikm_next;
820 ipc_kmsg_t kmsg)
828 if (ipc_kmsg_delayed_destroy(kmsg))
842 ipc_kmsg_t kmsg)
847 ipc_kmsg_enqueue(queue, kmsg);
864 ipc_kmsg_t kmsg;
867 * must leave kmsg in queue while cleaning it to assure
870 while ((kmsg = ipc_kmsg_queue_first(queue)) != IKM_NULL) {
871 ipc_kmsg_clean(kmsg);
872 ipc_kmsg_rmqueue(queue, kmsg);
873 ipc_kmsg_free(kmsg);
889 __unused ipc_kmsg_t kmsg,
986 ipc_kmsg_t kmsg,
993 mach_msg_bits_t mbits = kmsg->ikm_header->msgh_bits;
995 object = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
999 object = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
1007 ipc_kmsg_clean_body(kmsg, number, desc);
1021 ipc_kmsg_t kmsg)
1026 mbits = kmsg->ikm_header->msgh_bits;
1027 object = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
1031 object = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
1038 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
1039 ipc_kmsg_clean_body(kmsg, body->msgh_descriptor_count,
1044 if (kmsg->ikm_sender != NULL) {
1045 task_deallocate(kmsg->ikm_sender);
1046 kmsg->ikm_sender = NULL;
1054 * Assign a kmsg as a preallocated message buffer to a port.
1061 ipc_kmsg_t kmsg,
1064 assert(kmsg->ikm_prealloc == IP_NULL);
1066 kmsg->ikm_prealloc = IP_NULL;
1067 IP_SET_PREALLOC(port, kmsg);
1079 ipc_kmsg_t kmsg,
1082 assert(kmsg->ikm_prealloc == port);
1084 kmsg->ikm_prealloc = IP_NULL;
1085 IP_CLEAR_PREALLOC(port, kmsg);
1130 ipc_kmsg_t kmsg;
1162 kmsg = ipc_kmsg_alloc(msg_and_trailer_size);
1163 if (kmsg == IKM_NULL)
1166 kmsg->ikm_header->msgh_size = size;
1167 kmsg->ikm_header->msgh_bits = legacy_base.header.msgh_bits;
1168 kmsg->ikm_header->msgh_remote_port = CAST_MACH_NAME_TO_PORT(legacy_base.header.msgh_remote_port);
1169 kmsg->ikm_header->msgh_local_port = CAST_MACH_NAME_TO_PORT(legacy_base.header.msgh_local_port);
1170 kmsg->ikm_header->msgh_reserved = legacy_base.header.msgh_reserved;
1171 kmsg->ikm_header->msgh_id = legacy_base.header.msgh_id;
1180 kmsg->ikm_header->msgh_size,
1181 kmsg->ikm_header->msgh_bits,
1182 kmsg->ikm_header->msgh_remote_port,
1183 kmsg->ikm_header->msgh_local_port,
1184 kmsg->ikm_header->msgh_reserved,
1185 kmsg->ikm_header->msgh_id);
1187 if (copyinmsg(msg_addr, (char *)(kmsg->ikm_header + 1), size - (mach_msg_size_t)sizeof(mach_msg_header_t))) {
1188 ipc_kmsg_free(kmsg);
1198 kprintf("%.4x\n",((uint32_t *)(kmsg->ikm_header + 1))[i]);
1201 DEBUG_IPC_KMSG_PRINT(kmsg, "ipc_kmsg_get()");
1209 trailer = (mach_msg_max_trailer_t *) ((vm_offset_t)kmsg->ikm_header + size);
1216 if(trcWork.traceMask) dbgTrace(0x1100, (unsigned int)kmsg->ikm_header->msgh_id,
1217 (unsigned int)kmsg->ikm_header->msgh_remote_port,
1218 (unsigned int)kmsg->ikm_header->msgh_local_port, 0);
1226 kmsg->ikm_sender = cur;
1233 *kmsgp = kmsg;
1259 ipc_kmsg_t kmsg;
1272 * See if the port has a pre-allocated kmsg for kernel
1285 kmsg = dest_port->ip_premsg;
1286 if (ikm_prealloc_inuse(kmsg)) {
1297 if (msg_and_trailer_size > kmsg->ikm_size - max_desc) {
1301 ikm_prealloc_set_inuse(kmsg, dest_port);
1302 ikm_set_header(kmsg, msg_and_trailer_size);
1307 kmsg = ipc_kmsg_alloc(msg_and_trailer_size);
1308 if (kmsg == IKM_NULL)
1312 (void) memcpy((void *) kmsg->ikm_header, (const void *) msg, size);
1314 kmsg->ikm_header->msgh_size = size;
1323 ((vm_offset_t)kmsg->ikm_header + size);
1332 kmsg->ikm_sender = NULL;
1334 *kmsgp = kmsg;
1360 ipc_kmsg_t kmsg,
1377 if (kmsg->ikm_header->msgh_bits & MACH_MSGH_BITS_CIRCULAR) {
1378 ipc_kmsg_destroy(kmsg);
1382 port = (ipc_port_t) kmsg->ikm_header->msgh_remote_port;
1403 kmsg = ipc_kobject_server(kmsg);
1404 if (kmsg == IKM_NULL)
1407 port = (ipc_port_t) kmsg->ikm_header->msgh_remote_port;
1431 kmsg->ikm_header->msgh_remote_port = MACH_PORT_NULL;
1432 ipc_kmsg_destroy(kmsg);
1449 kmsg->ikm_header->msgh_bits |= MACH_MSGH_BITS_RAISEIMP;
1454 ((vm_offset_t)kmsg->ikm_header + round_msg(kmsg->ikm_header->msgh_size));
1456 imp_msgh_id = kmsg->ikm_header->msgh_id;
1479 error = ipc_mqueue_send(&port->ip_messages, kmsg, option,
1490 * We still have the kmsg and its
1536 kmsg->ikm_header->msgh_remote_port = MACH_PORT_NULL;
1537 ipc_kmsg_destroy(kmsg);
1560 ipc_kmsg_t kmsg,
1565 DEBUG_IPC_KMSG_PRINT(kmsg, "ipc_kmsg_put()");
1575 kmsg->ikm_header->msgh_size,
1576 kmsg->ikm_header->msgh_bits,
1577 kmsg->ikm_header->msgh_remote_port,
1578 kmsg->ikm_header->msgh_local_port,
1579 kmsg->ikm_header->msgh_reserved,
1580 kmsg->ikm_header->msgh_id);
1585 (mach_msg_legacy_header_t *)((vm_offset_t)(kmsg->ikm_header) + LEGACY_HEADER_SIZE_DELTA);
1587 mach_msg_bits_t bits = kmsg->ikm_header->msgh_bits;
1588 mach_msg_size_t msg_size = kmsg->ikm_header->msgh_size;
1589 mach_port_name_t remote_port = CAST_MACH_PORT_TO_NAME(kmsg->ikm_header->msgh_remote_port);
1590 mach_port_name_t local_port = CAST_MACH_PORT_TO_NAME(kmsg->ikm_header->msgh_local_port);
1591 mach_msg_size_t reserved = kmsg->ikm_header->msgh_reserved;
1592 mach_msg_id_t id = kmsg->ikm_header->msgh_id;
1602 kmsg->ikm_header = (mach_msg_header_t *)legacy_header;
1611 kprintf("%.4x\n",((uint32_t *)kmsg->ikm_header)[i]);
1613 kprintf("type: %d\n", ((mach_msg_type_descriptor_t *)(((mach_msg_base_t *)kmsg->ikm_header)+1))->type);
1615 if (copyoutmsg((const char *) kmsg->ikm_header, msg_addr, size))
1620 ipc_kmsg_free(kmsg);
1637 ipc_kmsg_t kmsg,
1640 (void) memcpy((void *) msg, (const void *) kmsg->ikm_header, size);
1642 ipc_kmsg_free(kmsg);
2204 ipc_kmsg_t kmsg,
2215 ipc_kmsg_t kmsg,
2239 kmsg->ikm_header->msgh_bits |= MACH_MSGH_BITS_CIRCULAR;
2373 ipc_kmsg_t kmsg,
2383 ipc_kmsg_t kmsg,
2499 kmsg->ikm_header->msgh_bits |= MACH_MSGH_BITS_CIRCULAR;
2531 ipc_kmsg_t kmsg,
2553 dest = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
2554 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
2590 ((vm_offset_t)kmsg->ikm_header + kmsg->ikm_header->msgh_size)) {
2591 ipc_kmsg_clean_partial(kmsg, 0, NULL, 0, 0);
2610 ipc_kmsg_clean_partial(kmsg, 0, NULL, 0, 0);
2625 ipc_kmsg_clean_partial(kmsg, 0, NULL, 0, 0);
2636 ipc_kmsg_clean_partial(kmsg, 0, NULL, 0, 0);
2652 ipc_kmsg_clean_partial(kmsg, 0, NULL, 0, 0);
2659 user_addr = (mach_msg_descriptor_t *)((vm_offset_t)kmsg->ikm_header + sizeof(mach_msg_base_t));
2663 memmove((char *)(((vm_offset_t)kmsg->ikm_header) - dsc_adjust), kmsg->ikm_header, sizeof(mach_msg_base_t));
2664 kmsg->ikm_header = (mach_msg_header_t *)((vm_offset_t)kmsg->ikm_header - dsc_adjust);
2666 kmsg->ikm_header->msgh_size += (mach_msg_size_t)dsc_adjust;
2671 kern_addr = (mach_msg_descriptor_t *)((vm_offset_t)kmsg->ikm_header + sizeof(mach_msg_base_t));
2678 (mach_msg_legacy_port_descriptor_t *)user_addr, space, dest, kmsg, &mr);
2691 user_addr, is_task_64bit, map, space, dest, kmsg, &mr);
2703 ipc_kmsg_clean_partial(kmsg, i,
2704 (mach_msg_descriptor_t *)((mach_msg_base_t *)kmsg->ikm_header + 1),
2711 kmsg->ikm_header->msgh_bits &= ~MACH_MSGH_BITS_COMPLEX;
2744 ipc_kmsg_t kmsg,
2751 kmsg->ikm_header->msgh_bits &= MACH_MSGH_BITS_USER;
2753 mr = ipc_kmsg_copyin_header(kmsg->ikm_header, space, optionp);
2759 kmsg->ikm_header->msgh_size,
2760 kmsg->ikm_header->msgh_bits,
2761 kmsg->ikm_header->msgh_remote_port,
2762 kmsg->ikm_header->msgh_local_port,
2763 kmsg->ikm_header->msgh_reserved,
2764 kmsg->ikm_header->msgh_id);
2766 if ((kmsg->ikm_header->msgh_bits & MACH_MSGH_BITS_COMPLEX) == 0)
2769 mr = ipc_kmsg_copyin_body( kmsg, space, map);
2775 for(i=0;i*4 < (kmsg->ikm_header->msgh_size - sizeof(mach_msg_header_t));i++)
2777 kprintf("%.4x\n",((uint32_t *)(kmsg->ikm_header + 1))[i]);
2799 ipc_kmsg_t kmsg)
2801 mach_msg_bits_t bits = kmsg->ikm_header->msgh_bits;
2804 ipc_object_t remote = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
2805 ipc_object_t local = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
2825 kmsg->ikm_header->msgh_bits = bits;
2831 kmsg->ikm_header->msgh_bits = bits;
2840 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
2875 kmsg->ikm_header->msgh_bits |=
2915 kmsg->ikm_header->msgh_bits |= MACH_MSGH_BITS_CIRCULAR;
2933 ipc_kmsg_t kmsg)
2935 mach_msg_bits_t bits = kmsg->ikm_header->msgh_bits;
2938 ipc_object_t remote = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
2939 ipc_object_t local = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
2959 kmsg->ikm_header->msgh_bits = bits;
2965 kmsg->ikm_header->msgh_bits = bits;
2975 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
2981 memmove((char *)(((vm_offset_t)kmsg->ikm_header) - dsc_adjust), kmsg->ikm_header, sizeof(mach_msg_base_t));
2982 kmsg->ikm_header = (mach_msg_header_t *)((vm_offset_t)kmsg->ikm_header - dsc_adjust);
2984 kmsg->ikm_header->msgh_size += dsc_adjust;
2986 daddr = (mach_msg_descriptor_t *)((vm_offset_t)kmsg->ikm_header + sizeof(mach_msg_base_t));
3022 kmsg->ikm_header->msgh_bits |=
3081 kmsg->ikm_header->msgh_bits |= MACH_MSGH_BITS_CIRCULAR;
3566 ipc_kmsg_t kmsg,
3574 ipc_kmsg_t kmsg,
3628 ipc_kmsg_clean_body(kmsg, 1, (mach_msg_descriptor_t *)dsc);
3734 ipc_kmsg_t kmsg,
3747 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
3778 (mach_msg_ool_ports_descriptor_t *)&kern_dsc[i], user_dsc, is_task_64bit, map, space, kmsg, &mr);
3788 memmove((char *)((vm_offset_t)kmsg->ikm_header + dsc_adjust), kmsg->ikm_header, sizeof(mach_msg_base_t));
3789 kmsg->ikm_header = (mach_msg_header_t *)((vm_offset_t)kmsg->ikm_header + dsc_adjust);
3791 kmsg->ikm_header->msgh_size -= (mach_msg_size_t)dsc_adjust;
3812 ipc_kmsg_t kmsg,
3817 send_size = kmsg->ikm_header->msgh_size;
3825 if (kmsg->ikm_header->msgh_bits & MACH_MSGH_BITS_COMPLEX) {
3830 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
3871 ipc_kmsg_t kmsg,
3878 mr = ipc_kmsg_copyout_header(kmsg->ikm_header, space);
3883 if (kmsg->ikm_header->msgh_bits & MACH_MSGH_BITS_COMPLEX) {
3884 mr = ipc_kmsg_copyout_body(kmsg, space, map, slist);
3915 ipc_kmsg_t kmsg,
3920 mach_msg_bits_t mbits = kmsg->ikm_header->msgh_bits;
3921 ipc_object_t dest = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
3922 ipc_object_t reply = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
3933 kmsg->ikm_header->msgh_bits = mbits & MACH_MSGH_BITS_USER;
3934 kmsg->ikm_header->msgh_remote_port = CAST_MACH_NAME_TO_PORT(dest_name);
3935 kmsg->ikm_header->msgh_local_port = CAST_MACH_NAME_TO_PORT(reply_name);
3938 mr |= ipc_kmsg_copyout_body(kmsg, space, map, slist);
3955 ipc_kmsg_t kmsg,
3965 mbits = kmsg->ikm_header->msgh_bits;
3966 dest = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
3967 reply = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
3989 kmsg->ikm_header->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
3991 kmsg->ikm_header->msgh_local_port = CAST_MACH_NAME_TO_PORT(dest_name);
3992 kmsg->ikm_header->msgh_remote_port = CAST_MACH_NAME_TO_PORT(reply_name);
3997 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
3998 ipc_kmsg_clean_body(kmsg, body->msgh_descriptor_count,
4008 * The gather (kmsg) is valid since it has been copied in.
4031 ipc_kmsg_t kmsg)
4061 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
4175 ipc_kmsg_t kmsg,
4184 dest = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
4185 reply = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
4186 dest_type = MACH_MSGH_BITS_REMOTE(kmsg->ikm_header->msgh_bits);
4187 reply_type = MACH_MSGH_BITS_LOCAL(kmsg->ikm_header->msgh_bits);
4203 kmsg->ikm_header->msgh_bits =
4204 (MACH_MSGH_BITS_OTHER(kmsg->ikm_header->msgh_bits) |
4206 kmsg->ikm_header->msgh_local_port = CAST_MACH_NAME_TO_PORT(dest_name);
4207 kmsg->ikm_header->msgh_remote_port = CAST_MACH_NAME_TO_PORT(reply_name);
4213 ipc_kmsg_t kmsg,
4222 dest = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
4223 reply = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
4224 dest_type = MACH_MSGH_BITS_REMOTE(kmsg->ikm_header->msgh_bits);
4225 reply_type = MACH_MSGH_BITS_LOCAL(kmsg->ikm_header->msgh_bits);
4241 kmsg->ikm_header->msgh_bits =
4242 (MACH_MSGH_BITS_OTHER(kmsg->ikm_header->msgh_bits) |
4244 kmsg->ikm_header->msgh_local_port = CAST_MACH_NAME_TO_PORT(dest_name);
4245 kmsg->ikm_header->msgh_remote_port = CAST_MACH_NAME_TO_PORT(reply_name);
4249 mach_msg_type_number_t i, count = ((mach_msg_base_t *)kmsg->ikm_header)->body.msgh_descriptor_count;
4250 saddr = (mach_msg_descriptor_t *) (((mach_msg_base_t *)kmsg->ikm_header) + 1);
4321 memmove((char *)((vm_offset_t)kmsg->ikm_header + dsc_adjust), kmsg->ikm_header, sizeof(mach_msg_base_t));
4322 kmsg->ikm_header = (mach_msg_header_t *)((vm_offset_t)kmsg->ikm_header + dsc_adjust);
4324 kmsg->ikm_header->msgh_size -= dsc_adjust;
4330 ipc_kmsg_add_trailer(ipc_kmsg_t kmsg, ipc_space_t space,
4339 ((vm_offset_t)kmsg->ikm_header +
4340 round_msg(kmsg->ikm_header->msgh_size));
4357 if (kmsg->ikm_sender != NULL &&
4358 IP_VALID(kmsg->ikm_header->msgh_remote_port) &&
4359 mac_port_check_method(kmsg->ikm_sender,
4360 &kmsg->ikm_sender->maclabel,
4361 &kmsg->ikm_header->msgh_remote_port->ip_label,
4362 kmsg->ikm_header->msgh_id) == 0)
4377 if (kmsg->ikm_sender != NULL) {
4378 ipc_labelh_t lh = kmsg->ikm_sender->label;