Lines Matching refs:part

16  *	    partition	This part detects the presence/absence of other
20 * channel This part manages the channels and sends/receives
68 .init_name = "", /* set to "part" at xpc_init() time */
167 struct xpc_partition *part = from_timer(part, t, disengage_timer);
169 DBUG_ON(time_is_after_jiffies(part->disengage_timeout));
171 xpc_partition_disengaged_from_timer(part);
173 DBUG_ON(part->disengage_timeout != 0);
174 DBUG_ON(xpc_arch_ops.partition_engaged(XPC_PARTID(part)));
216 struct xpc_partition *part;
228 part = &xpc_partitions[partid];
230 if (part->act_state == XPC_P_AS_INACTIVE ||
231 part->act_state == XPC_P_AS_DEACTIVATING) {
235 ret = xpc_arch_ops.get_remote_heartbeat(part);
237 XPC_DEACTIVATE_PARTITION(part, ret);
329 xpc_channel_mgr(struct xpc_partition *part)
331 while (part->act_state != XPC_P_AS_DEACTIVATING ||
332 atomic_read(&part->nchannels_active) > 0 ||
333 !xpc_partition_disengaged(part)) {
335 xpc_process_sent_chctl_flags(part);
350 atomic_dec(&part->channel_mgr_requests);
351 (void)wait_event_interruptible(part->channel_mgr_wq,
352 (atomic_read(&part->channel_mgr_requests) > 0 ||
353 part->chctl.all_flags != 0 ||
354 (part->act_state == XPC_P_AS_DEACTIVATING &&
355 atomic_read(&part->nchannels_active) == 0 &&
356 xpc_partition_disengaged(part))));
357 atomic_set(&part->channel_mgr_requests, 1);
390 xpc_setup_ch_structures(struct xpc_partition *part)
395 short partid = XPC_PARTID(part);
401 DBUG_ON(part->channels != NULL);
402 part->channels = kcalloc(XPC_MAX_NCHANNELS,
405 if (part->channels == NULL) {
412 part->remote_openclose_args =
414 GFP_KERNEL, &part->
416 if (part->remote_openclose_args == NULL) {
422 part->chctl.all_flags = 0;
423 spin_lock_init(&part->chctl_lock);
425 atomic_set(&part->channel_mgr_requests, 1);
426 init_waitqueue_head(&part->channel_mgr_wq);
428 part->nchannels = XPC_MAX_NCHANNELS;
430 atomic_set(&part->nchannels_active, 0);
431 atomic_set(&part->nchannels_engaged, 0);
433 for (ch_number = 0; ch_number < part->nchannels; ch_number++) {
434 ch = &part->channels[ch_number];
455 ret = xpc_arch_ops.setup_ch_structures(part);
463 part->setup_state = XPC_P_SS_SETUP;
469 kfree(part->remote_openclose_args_base);
470 part->remote_openclose_args = NULL;
472 kfree(part->channels);
473 part->channels = NULL;
482 xpc_teardown_ch_structures(struct xpc_partition *part)
484 DBUG_ON(atomic_read(&part->nchannels_engaged) != 0);
485 DBUG_ON(atomic_read(&part->nchannels_active) != 0);
492 DBUG_ON(part->setup_state != XPC_P_SS_SETUP);
493 part->setup_state = XPC_P_SS_WTEARDOWN;
495 wait_event(part->teardown_wq, (atomic_read(&part->references) == 0));
499 xpc_arch_ops.teardown_ch_structures(part);
501 kfree(part->remote_openclose_args_base);
502 part->remote_openclose_args = NULL;
503 kfree(part->channels);
504 part->channels = NULL;
506 part->setup_state = XPC_P_SS_TORNDOWN;
524 struct xpc_partition *part = &xpc_partitions[partid];
529 spin_lock_irqsave(&part->act_lock, irq_flags);
531 if (part->act_state == XPC_P_AS_DEACTIVATING) {
532 part->act_state = XPC_P_AS_INACTIVE;
533 spin_unlock_irqrestore(&part->act_lock, irq_flags);
534 part->remote_rp_pa = 0;
539 DBUG_ON(part->act_state != XPC_P_AS_ACTIVATION_REQ);
540 part->act_state = XPC_P_AS_ACTIVATING;
542 XPC_SET_REASON(part, 0, 0);
543 spin_unlock_irqrestore(&part->act_lock, irq_flags);
549 if (xpc_setup_ch_structures(part) == xpSuccess) {
550 (void)xpc_part_ref(part); /* this will always succeed */
552 if (xpc_arch_ops.make_first_contact(part) == xpSuccess) {
553 xpc_mark_partition_active(part);
554 xpc_channel_mgr(part);
558 xpc_part_deref(part);
559 xpc_teardown_ch_structures(part);
563 xpc_mark_partition_inactive(part);
565 if (part->reason == xpReactivating) {
567 xpc_arch_ops.request_partition_reactivation(part);
574 xpc_activate_partition(struct xpc_partition *part)
576 short partid = XPC_PARTID(part);
580 spin_lock_irqsave(&part->act_lock, irq_flags);
582 DBUG_ON(part->act_state != XPC_P_AS_INACTIVE);
584 part->act_state = XPC_P_AS_ACTIVATION_REQ;
585 XPC_SET_REASON(part, xpCloneKThread, __LINE__);
587 spin_unlock_irqrestore(&part->act_lock, irq_flags);
592 spin_lock_irqsave(&part->act_lock, irq_flags);
593 part->act_state = XPC_P_AS_INACTIVE;
594 XPC_SET_REASON(part, xpCloneKThreadFailed, __LINE__);
595 spin_unlock_irqrestore(&part->act_lock, irq_flags);
638 xpc_kthread_waitmsgs(struct xpc_partition *part, struct xpc_channel *ch)
675 struct xpc_partition *part = &xpc_partitions[partid];
685 ch = &part->channels[ch_number];
717 xpc_kthread_waitmsgs(part, ch);
736 atomic_dec_return(&part->nchannels_engaged) == 0) {
737 xpc_arch_ops.indicate_partition_disengaged(part);
745 xpc_part_deref(part);
767 struct xpc_partition *part = &xpc_partitions[ch->partid];
791 atomic_inc_return(&part->nchannels_engaged) == 1) {
792 xpc_arch_ops.indicate_partition_engaged(part);
794 (void)xpc_part_ref(part);
813 atomic_dec_return(&part->nchannels_engaged) == 0) {
814 indicate_partition_disengaged(part);
817 xpc_part_deref(part);
841 struct xpc_partition *part;
847 part = &xpc_partitions[partid];
849 if (!xpc_part_ref(part))
852 ch = &part->channels[ch_number];
855 xpc_part_deref(part);
866 if (part->act_state != XPC_P_AS_DEACTIVATING) {
867 spin_lock(&part->chctl_lock);
868 part->chctl.flags[ch->number] |=
870 spin_unlock(&part->chctl_lock);
880 xpc_wakeup_channel_mgr(part);
882 xpc_part_deref(part);
890 struct xpc_partition *part;
909 part = &xpc_partitions[partid];
911 DBUG_ON((u64)part != L1_CACHE_ALIGN((u64)part));
913 part->activate_IRQ_rcvd = 0;
914 spin_lock_init(&part->act_lock);
915 part->act_state = XPC_P_AS_INACTIVE;
916 XPC_SET_REASON(part, 0, 0);
918 timer_setup(&part->disengage_timer,
921 part->setup_state = XPC_P_SS_UNSET;
922 init_waitqueue_head(&part->teardown_wq);
923 atomic_set(&part->references, 0);
941 struct xpc_partition *part;
973 part = &xpc_partitions[partid];
975 if (xpc_partition_disengaged(part) &&
976 part->act_state == XPC_P_AS_INACTIVE) {
982 XPC_DEACTIVATE_PARTITION(part, reason);
984 if (part->disengage_timeout > disengage_timeout)
985 disengage_timeout = part->disengage_timeout;
1078 struct xpc_partition *part;
1093 part = &xpc_partitions[partid];
1096 part->act_state != XPC_P_AS_INACTIVE) {
1097 xpc_arch_ops.request_partition_deactivation(part);
1098 xpc_arch_ops.indicate_partition_disengaged(part);
1187 dev_set_name(xpc_part, "part");