Lines Matching refs:kmsg

176 			ipc_kmsg_t      kmsg,
292 ipc_kmsg_t kmsg,
295 kprintf("%s kmsg=%p:\n", str, kmsg);
297 kmsg->ikm_next,
298 kmsg->ikm_prev,
299 kmsg->ikm_size);
301 ipc_msg_print64(kmsg->ikm_header);
473 #define DEBUG_IPC_KMSG_PRINT(kmsg,string) \
475 ipc_kmsg_print64(kmsg, string); \
482 #define DEBUG_IPC_KMSG_PRINT(kmsg,string)
540 ipc_kmsg_t kmsg);
543 ipc_kmsg_t kmsg,
548 ipc_kmsg_t kmsg,
555 ipc_kmsg_t kmsg,
580 ipc_kmsg_t kmsg;
625 kmsg = cache->entries[--i];
628 ikm_check_init(kmsg, max_expanded_size);
629 ikm_set_header(kmsg, msg_and_trailer_size);
630 return (kmsg);
633 kmsg = (ipc_kmsg_t)zalloc(ipc_kmsg_zone);
635 kmsg = (ipc_kmsg_t)kalloc(ikm_plus_overhead(max_expanded_size));
638 if (kmsg != IKM_NULL) {
639 ikm_init(kmsg, max_expanded_size);
640 ikm_set_header(kmsg, msg_and_trailer_size);
643 return(kmsg);
660 ipc_kmsg_t kmsg)
662 mach_msg_size_t size = kmsg->ikm_size;
666 if (kmsg->ikm_sender != NULL) {
667 task_deallocate(kmsg->ikm_sender);
668 kmsg->ikm_sender = NULL;
677 port = ikm_prealloc_inuse_port(kmsg);
680 ikm_prealloc_clear_inuse(kmsg, port);
681 if (ip_active(port) && (port->ip_premsg == kmsg)) {
694 if (kmsg->ikm_size == IKM_SAVED_MSG_SIZE) {
701 cache->entries[i] = kmsg;
707 zfree(ipc_kmsg_zone, kmsg);
710 kfree(kmsg, ikm_plus_overhead(size));
717 * Enqueue a kmsg.
723 ipc_kmsg_t kmsg)
725 ipc_kmsg_enqueue_macro(queue, kmsg);
731 * Dequeue and return a kmsg.
751 * Pull a kmsg out of a queue.
757 ipc_kmsg_t kmsg)
763 next = kmsg->ikm_next;
764 prev = kmsg->ikm_prev;
766 if (next == kmsg) {
767 assert(prev == kmsg);
768 assert(queue->ikmq_base == kmsg);
772 if (queue->ikmq_base == kmsg)
779 assert((kmsg->ikm_next = IKM_BOGUS) == IKM_BOGUS);
780 assert((kmsg->ikm_prev = IKM_BOGUS) == IKM_BOGUS);
786 * Return the kmsg following the given kmsg.
793 ipc_kmsg_t kmsg)
799 next = kmsg->ikm_next;
818 ipc_kmsg_t kmsg)
826 if (ipc_kmsg_delayed_destroy(kmsg))
840 ipc_kmsg_t kmsg)
845 ipc_kmsg_enqueue(queue, kmsg);
862 ipc_kmsg_t kmsg;
865 * must leave kmsg in queue while cleaning it to assure
868 while ((kmsg = ipc_kmsg_queue_first(queue)) != IKM_NULL) {
869 ipc_kmsg_clean(kmsg);
870 ipc_kmsg_rmqueue(queue, kmsg);
871 ipc_kmsg_free(kmsg);
887 __unused ipc_kmsg_t kmsg,
984 ipc_kmsg_t kmsg,
991 mach_msg_bits_t mbits = kmsg->ikm_header->msgh_bits;
993 object = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
997 object = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
1005 ipc_kmsg_clean_body(kmsg, number, desc);
1019 ipc_kmsg_t kmsg)
1024 mbits = kmsg->ikm_header->msgh_bits;
1025 object = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
1029 object = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
1036 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
1037 ipc_kmsg_clean_body(kmsg, body->msgh_descriptor_count,
1042 if (kmsg->ikm_sender != NULL) {
1043 task_deallocate(kmsg->ikm_sender);
1044 kmsg->ikm_sender = NULL;
1052 * Assign a kmsg as a preallocated message buffer to a port.
1059 ipc_kmsg_t kmsg,
1062 assert(kmsg->ikm_prealloc == IP_NULL);
1064 kmsg->ikm_prealloc = IP_NULL;
1065 IP_SET_PREALLOC(port, kmsg);
1077 ipc_kmsg_t kmsg,
1080 assert(kmsg->ikm_prealloc == port);
1082 kmsg->ikm_prealloc = IP_NULL;
1083 IP_CLEAR_PREALLOC(port, kmsg);
1128 ipc_kmsg_t kmsg;
1160 kmsg = ipc_kmsg_alloc(msg_and_trailer_size);
1161 if (kmsg == IKM_NULL)
1164 kmsg->ikm_header->msgh_size = size;
1165 kmsg->ikm_header->msgh_bits = legacy_base.header.msgh_bits;
1166 kmsg->ikm_header->msgh_remote_port = CAST_MACH_NAME_TO_PORT(legacy_base.header.msgh_remote_port);
1167 kmsg->ikm_header->msgh_local_port = CAST_MACH_NAME_TO_PORT(legacy_base.header.msgh_local_port);
1168 kmsg->ikm_header->msgh_reserved = legacy_base.header.msgh_reserved;
1169 kmsg->ikm_header->msgh_id = legacy_base.header.msgh_id;
1178 kmsg->ikm_header->msgh_size,
1179 kmsg->ikm_header->msgh_bits,
1180 kmsg->ikm_header->msgh_remote_port,
1181 kmsg->ikm_header->msgh_local_port,
1182 kmsg->ikm_header->msgh_reserved,
1183 kmsg->ikm_header->msgh_id);
1185 if (copyinmsg(msg_addr, (char *)(kmsg->ikm_header + 1), size - (mach_msg_size_t)sizeof(mach_msg_header_t))) {
1186 ipc_kmsg_free(kmsg);
1196 kprintf("%.4x\n",((uint32_t *)(kmsg->ikm_header + 1))[i]);
1199 DEBUG_IPC_KMSG_PRINT(kmsg, "ipc_kmsg_get()");
1207 trailer = (mach_msg_max_trailer_t *) ((vm_offset_t)kmsg->ikm_header + size);
1214 if(trcWork.traceMask) dbgTrace(0x1100, (unsigned int)kmsg->ikm_header->msgh_id,
1215 (unsigned int)kmsg->ikm_header->msgh_remote_port,
1216 (unsigned int)kmsg->ikm_header->msgh_local_port, 0);
1224 kmsg->ikm_sender = cur;
1231 *kmsgp = kmsg;
1257 ipc_kmsg_t kmsg;
1270 * See if the port has a pre-allocated kmsg for kernel
1283 kmsg = dest_port->ip_premsg;
1284 if (ikm_prealloc_inuse(kmsg)) {
1295 if (msg_and_trailer_size > kmsg->ikm_size - max_desc) {
1299 ikm_prealloc_set_inuse(kmsg, dest_port);
1300 ikm_set_header(kmsg, msg_and_trailer_size);
1305 kmsg = ipc_kmsg_alloc(msg_and_trailer_size);
1306 if (kmsg == IKM_NULL)
1310 (void) memcpy((void *) kmsg->ikm_header, (const void *) msg, size);
1312 kmsg->ikm_header->msgh_size = size;
1321 ((vm_offset_t)kmsg->ikm_header + size);
1330 kmsg->ikm_sender = NULL;
1332 *kmsgp = kmsg;
1356 ipc_kmsg_t kmsg,
1364 port = (ipc_port_t) kmsg->ikm_header->msgh_remote_port;
1386 kmsg = ipc_kobject_server(kmsg);
1387 if (kmsg == IKM_NULL)
1390 port = (ipc_port_t) kmsg->ikm_header->msgh_remote_port;
1410 kmsg->ikm_header->msgh_remote_port = MACH_PORT_NULL;
1411 ipc_kmsg_destroy(kmsg);
1415 if (kmsg->ikm_header->msgh_bits & MACH_MSGH_BITS_CIRCULAR) {
1420 ipc_kmsg_destroy(kmsg);
1432 error = ipc_mqueue_send(&port->ip_messages, kmsg, option,
1440 kmsg->ikm_header->msgh_remote_port = MACH_PORT_NULL;
1441 ipc_kmsg_destroy(kmsg);
1464 ipc_kmsg_t kmsg,
1469 DEBUG_IPC_KMSG_PRINT(kmsg, "ipc_kmsg_put()");
1478 kmsg->ikm_header->msgh_size,
1479 kmsg->ikm_header->msgh_bits,
1480 kmsg->ikm_header->msgh_remote_port,
1481 kmsg->ikm_header->msgh_local_port,
1482 kmsg->ikm_header->msgh_reserved,
1483 kmsg->ikm_header->msgh_id);
1488 (mach_msg_legacy_header_t *)((vm_offset_t)(kmsg->ikm_header) + LEGACY_HEADER_SIZE_DELTA);
1490 mach_msg_bits_t bits = kmsg->ikm_header->msgh_bits;
1491 mach_msg_size_t msg_size = kmsg->ikm_header->msgh_size;
1492 mach_port_name_t remote_port = CAST_MACH_PORT_TO_NAME(kmsg->ikm_header->msgh_remote_port);
1493 mach_port_name_t local_port = CAST_MACH_PORT_TO_NAME(kmsg->ikm_header->msgh_local_port);
1494 mach_msg_size_t reserved = kmsg->ikm_header->msgh_reserved;
1495 mach_msg_id_t id = kmsg->ikm_header->msgh_id;
1505 kmsg->ikm_header = (mach_msg_header_t *)legacy_header;
1514 kprintf("%.4x\n",((uint32_t *)kmsg->ikm_header)[i]);
1516 kprintf("type: %d\n", ((mach_msg_type_descriptor_t *)(((mach_msg_base_t *)kmsg->ikm_header)+1))->type);
1518 if (copyoutmsg((const char *) kmsg->ikm_header, msg_addr, size))
1523 ipc_kmsg_free(kmsg);
1540 ipc_kmsg_t kmsg,
1543 (void) memcpy((void *) msg, (const void *) kmsg->ikm_header, size);
1545 ipc_kmsg_free(kmsg);
1992 ipc_kmsg_t kmsg,
2003 ipc_kmsg_t kmsg,
2027 kmsg->ikm_header->msgh_bits |= MACH_MSGH_BITS_CIRCULAR;
2161 ipc_kmsg_t kmsg,
2171 ipc_kmsg_t kmsg,
2287 kmsg->ikm_header->msgh_bits |= MACH_MSGH_BITS_CIRCULAR;
2319 ipc_kmsg_t kmsg,
2341 dest = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
2342 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
2378 ((vm_offset_t)kmsg->ikm_header + kmsg->ikm_header->msgh_size)) {
2379 ipc_kmsg_clean_partial(kmsg, 0, NULL, 0, 0);
2398 ipc_kmsg_clean_partial(kmsg, 0, NULL, 0, 0);
2417 ipc_kmsg_clean_partial(kmsg, 0, NULL, 0, 0);
2433 ipc_kmsg_clean_partial(kmsg, 0, NULL, 0, 0);
2440 user_addr = (mach_msg_descriptor_t *)((vm_offset_t)kmsg->ikm_header + sizeof(mach_msg_base_t));
2444 memmove((char *)(((vm_offset_t)kmsg->ikm_header) - dsc_adjust), kmsg->ikm_header, sizeof(mach_msg_base_t));
2445 kmsg->ikm_header = (mach_msg_header_t *)((vm_offset_t)kmsg->ikm_header - dsc_adjust);
2447 kmsg->ikm_header->msgh_size += (mach_msg_size_t)dsc_adjust;
2452 kern_addr = (mach_msg_descriptor_t *)((vm_offset_t)kmsg->ikm_header + sizeof(mach_msg_base_t));
2459 (mach_msg_legacy_port_descriptor_t *)user_addr, space, dest, kmsg, &mr);
2472 user_addr, is_task_64bit, map, space, dest, kmsg, &mr);
2484 ipc_kmsg_clean_partial(kmsg, i,
2485 (mach_msg_descriptor_t *)((mach_msg_base_t *)kmsg->ikm_header + 1),
2492 kmsg->ikm_header->msgh_bits &= ~MACH_MSGH_BITS_COMPLEX;
2525 ipc_kmsg_t kmsg,
2532 mr = ipc_kmsg_copyin_header(kmsg->ikm_header, space, notify);
2537 kmsg->ikm_header->msgh_size,
2538 kmsg->ikm_header->msgh_bits,
2539 kmsg->ikm_header->msgh_remote_port,
2540 kmsg->ikm_header->msgh_local_port,
2541 kmsg->ikm_header->msgh_reserved,
2542 kmsg->ikm_header->msgh_id);
2544 if ((kmsg->ikm_header->msgh_bits & MACH_MSGH_BITS_COMPLEX) == 0)
2547 mr = ipc_kmsg_copyin_body( kmsg, space, map);
2553 for(i=0;i*4 < (kmsg->ikm_header->msgh_size - sizeof(mach_msg_header_t));i++)
2555 kprintf("%.4x\n",((uint32_t *)(kmsg->ikm_header + 1))[i]);
2579 ipc_kmsg_t kmsg)
2581 mach_msg_bits_t bits = kmsg->ikm_header->msgh_bits;
2584 ipc_object_t remote = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
2585 ipc_object_t local = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
2605 kmsg->ikm_header->msgh_bits = bits;
2611 kmsg->ikm_header->msgh_bits = bits;
2620 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
2655 kmsg->ikm_header->msgh_bits |=
2695 kmsg->ikm_header->msgh_bits |= MACH_MSGH_BITS_CIRCULAR;
2713 ipc_kmsg_t kmsg)
2715 mach_msg_bits_t bits = kmsg->ikm_header->msgh_bits;
2718 ipc_object_t remote = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
2719 ipc_object_t local = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
2739 kmsg->ikm_header->msgh_bits = bits;
2745 kmsg->ikm_header->msgh_bits = bits;
2755 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
2761 memmove((char *)(((vm_offset_t)kmsg->ikm_header) - dsc_adjust), kmsg->ikm_header, sizeof(mach_msg_base_t));
2762 kmsg->ikm_header = (mach_msg_header_t *)((vm_offset_t)kmsg->ikm_header - dsc_adjust);
2764 kmsg->ikm_header->msgh_size += dsc_adjust;
2766 daddr = (mach_msg_descriptor_t *)((vm_offset_t)kmsg->ikm_header + sizeof(mach_msg_base_t));
2802 kmsg->ikm_header->msgh_bits |=
2861 kmsg->ikm_header->msgh_bits |= MACH_MSGH_BITS_CIRCULAR;
3343 ipc_kmsg_t kmsg,
3351 ipc_kmsg_t kmsg,
3405 ipc_kmsg_clean_body(kmsg, 1, (mach_msg_descriptor_t *)dsc);
3511 ipc_kmsg_t kmsg,
3524 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
3555 (mach_msg_ool_ports_descriptor_t *)&kern_dsc[i], user_dsc, is_task_64bit, map, space, kmsg, &mr);
3565 memmove((char *)((vm_offset_t)kmsg->ikm_header + dsc_adjust), kmsg->ikm_header, sizeof(mach_msg_base_t));
3566 kmsg->ikm_header = (mach_msg_header_t *)((vm_offset_t)kmsg->ikm_header + dsc_adjust);
3568 kmsg->ikm_header->msgh_size -= (mach_msg_size_t)dsc_adjust;
3589 ipc_kmsg_t kmsg,
3594 send_size = kmsg->ikm_header->msgh_size;
3602 if (kmsg->ikm_header->msgh_bits & MACH_MSGH_BITS_COMPLEX) {
3607 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
3648 ipc_kmsg_t kmsg,
3655 mr = ipc_kmsg_copyout_header(kmsg->ikm_header, space);
3660 if (kmsg->ikm_header->msgh_bits & MACH_MSGH_BITS_COMPLEX) {
3661 mr = ipc_kmsg_copyout_body(kmsg, space, map, slist);
3692 ipc_kmsg_t kmsg,
3697 mach_msg_bits_t mbits = kmsg->ikm_header->msgh_bits;
3698 ipc_object_t dest = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
3699 ipc_object_t reply = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
3710 kmsg->ikm_header->msgh_bits = mbits &~ MACH_MSGH_BITS_CIRCULAR;
3711 kmsg->ikm_header->msgh_remote_port = CAST_MACH_NAME_TO_PORT(dest_name);
3712 kmsg->ikm_header->msgh_local_port = CAST_MACH_NAME_TO_PORT(reply_name);
3715 mr |= ipc_kmsg_copyout_body(kmsg, space, map, slist);
3732 ipc_kmsg_t kmsg,
3742 mbits = kmsg->ikm_header->msgh_bits;
3743 dest = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
3744 reply = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
3766 kmsg->ikm_header->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
3768 kmsg->ikm_header->msgh_local_port = CAST_MACH_NAME_TO_PORT(dest_name);
3769 kmsg->ikm_header->msgh_remote_port = CAST_MACH_NAME_TO_PORT(reply_name);
3774 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
3775 ipc_kmsg_clean_body(kmsg, body->msgh_descriptor_count,
3785 * The gather (kmsg) is valid since it has been copied in.
3808 ipc_kmsg_t kmsg)
3838 body = (mach_msg_body_t *) (kmsg->ikm_header + 1);
3952 ipc_kmsg_t kmsg,
3961 dest = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
3962 reply = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
3963 dest_type = MACH_MSGH_BITS_REMOTE(kmsg->ikm_header->msgh_bits);
3964 reply_type = MACH_MSGH_BITS_LOCAL(kmsg->ikm_header->msgh_bits);
3980 kmsg->ikm_header->msgh_bits =
3981 (MACH_MSGH_BITS_OTHER(kmsg->ikm_header->msgh_bits) |
3983 kmsg->ikm_header->msgh_local_port = CAST_MACH_NAME_TO_PORT(dest_name);
3984 kmsg->ikm_header->msgh_remote_port = CAST_MACH_NAME_TO_PORT(reply_name);
3990 ipc_kmsg_t kmsg,
3999 dest = (ipc_object_t) kmsg->ikm_header->msgh_remote_port;
4000 reply = (ipc_object_t) kmsg->ikm_header->msgh_local_port;
4001 dest_type = MACH_MSGH_BITS_REMOTE(kmsg->ikm_header->msgh_bits);
4002 reply_type = MACH_MSGH_BITS_LOCAL(kmsg->ikm_header->msgh_bits);
4018 kmsg->ikm_header->msgh_bits =
4019 (MACH_MSGH_BITS_OTHER(kmsg->ikm_header->msgh_bits) |
4021 kmsg->ikm_header->msgh_local_port = CAST_MACH_NAME_TO_PORT(dest_name);
4022 kmsg->ikm_header->msgh_remote_port = CAST_MACH_NAME_TO_PORT(reply_name);
4026 mach_msg_type_number_t i, count = ((mach_msg_base_t *)kmsg->ikm_header)->body.msgh_descriptor_count;
4027 saddr = (mach_msg_descriptor_t *) (((mach_msg_base_t *)kmsg->ikm_header) + 1);
4098 memmove((char *)((vm_offset_t)kmsg->ikm_header + dsc_adjust), kmsg->ikm_header, sizeof(mach_msg_base_t));
4099 kmsg->ikm_header = (mach_msg_header_t *)((vm_offset_t)kmsg->ikm_header + dsc_adjust);
4101 kmsg->ikm_header->msgh_size -= dsc_adjust;
4107 ipc_kmsg_add_trailer(ipc_kmsg_t kmsg, ipc_space_t space,
4116 ((vm_offset_t)kmsg->ikm_header +
4117 round_msg(kmsg->ikm_header->msgh_size));
4134 if (kmsg->ikm_sender != NULL &&
4135 IP_VALID(kmsg->ikm_header->msgh_remote_port) &&
4136 mac_port_check_method(kmsg->ikm_sender,
4137 &kmsg->ikm_sender->maclabel,
4138 &kmsg->ikm_header->msgh_remote_port->ip_label,
4139 kmsg->ikm_header->msgh_id) == 0)
4154 if (kmsg->ikm_sender != NULL) {
4155 ipc_labelh_t lh = kmsg->ikm_sender->label;