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 */
178 struct xpc_partition *part = from_timer(part, t, disengage_timer);
180 DBUG_ON(time_is_after_jiffies(part->disengage_timeout));
182 (void)xpc_partition_disengaged(part);
184 DBUG_ON(part->disengage_timeout != 0);
185 DBUG_ON(xpc_arch_ops.partition_engaged(XPC_PARTID(part)));
227 struct xpc_partition *part;
239 part = &xpc_partitions[partid];
241 if (part->act_state == XPC_P_AS_INACTIVE ||
242 part->act_state == XPC_P_AS_DEACTIVATING) {
246 ret = xpc_arch_ops.get_remote_heartbeat(part);
248 XPC_DEACTIVATE_PARTITION(part, ret);
340 xpc_channel_mgr(struct xpc_partition *part)
342 while (part->act_state != XPC_P_AS_DEACTIVATING ||
343 atomic_read(&part->nchannels_active) > 0 ||
344 !xpc_partition_disengaged(part)) {
346 xpc_process_sent_chctl_flags(part);
361 atomic_dec(&part->channel_mgr_requests);
362 (void)wait_event_interruptible(part->channel_mgr_wq,
363 (atomic_read(&part->channel_mgr_requests) > 0 ||
364 part->chctl.all_flags != 0 ||
365 (part->act_state == XPC_P_AS_DEACTIVATING &&
366 atomic_read(&part->nchannels_active) == 0 &&
367 xpc_partition_disengaged(part))));
368 atomic_set(&part->channel_mgr_requests, 1);
401 xpc_setup_ch_structures(struct xpc_partition *part)
406 short partid = XPC_PARTID(part);
412 DBUG_ON(part->channels != NULL);
413 part->channels = kcalloc(XPC_MAX_NCHANNELS,
416 if (part->channels == NULL) {
423 part->remote_openclose_args =
425 GFP_KERNEL, &part->
427 if (part->remote_openclose_args == NULL) {
433 part->chctl.all_flags = 0;
434 spin_lock_init(&part->chctl_lock);
436 atomic_set(&part->channel_mgr_requests, 1);
437 init_waitqueue_head(&part->channel_mgr_wq);
439 part->nchannels = XPC_MAX_NCHANNELS;
441 atomic_set(&part->nchannels_active, 0);
442 atomic_set(&part->nchannels_engaged, 0);
444 for (ch_number = 0; ch_number < part->nchannels; ch_number++) {
445 ch = &part->channels[ch_number];
466 ret = xpc_arch_ops.setup_ch_structures(part);
474 part->setup_state = XPC_P_SS_SETUP;
480 kfree(part->remote_openclose_args_base);
481 part->remote_openclose_args = NULL;
483 kfree(part->channels);
484 part->channels = NULL;
493 xpc_teardown_ch_structures(struct xpc_partition *part)
495 DBUG_ON(atomic_read(&part->nchannels_engaged) != 0);
496 DBUG_ON(atomic_read(&part->nchannels_active) != 0);
503 DBUG_ON(part->setup_state != XPC_P_SS_SETUP);
504 part->setup_state = XPC_P_SS_WTEARDOWN;
506 wait_event(part->teardown_wq, (atomic_read(&part->references) == 0));
510 xpc_arch_ops.teardown_ch_structures(part);
512 kfree(part->remote_openclose_args_base);
513 part->remote_openclose_args = NULL;
514 kfree(part->channels);
515 part->channels = NULL;
517 part->setup_state = XPC_P_SS_TORNDOWN;
535 struct xpc_partition *part = &xpc_partitions[partid];
540 spin_lock_irqsave(&part->act_lock, irq_flags);
542 if (part->act_state == XPC_P_AS_DEACTIVATING) {
543 part->act_state = XPC_P_AS_INACTIVE;
544 spin_unlock_irqrestore(&part->act_lock, irq_flags);
545 part->remote_rp_pa = 0;
550 DBUG_ON(part->act_state != XPC_P_AS_ACTIVATION_REQ);
551 part->act_state = XPC_P_AS_ACTIVATING;
553 XPC_SET_REASON(part, 0, 0);
554 spin_unlock_irqrestore(&part->act_lock, irq_flags);
560 if (xpc_setup_ch_structures(part) == xpSuccess) {
561 (void)xpc_part_ref(part); /* this will always succeed */
563 if (xpc_arch_ops.make_first_contact(part) == xpSuccess) {
564 xpc_mark_partition_active(part);
565 xpc_channel_mgr(part);
569 xpc_part_deref(part);
570 xpc_teardown_ch_structures(part);
574 xpc_mark_partition_inactive(part);
576 if (part->reason == xpReactivating) {
578 xpc_arch_ops.request_partition_reactivation(part);
585 xpc_activate_partition(struct xpc_partition *part)
587 short partid = XPC_PARTID(part);
591 spin_lock_irqsave(&part->act_lock, irq_flags);
593 DBUG_ON(part->act_state != XPC_P_AS_INACTIVE);
595 part->act_state = XPC_P_AS_ACTIVATION_REQ;
596 XPC_SET_REASON(part, xpCloneKThread, __LINE__);
598 spin_unlock_irqrestore(&part->act_lock, irq_flags);
603 spin_lock_irqsave(&part->act_lock, irq_flags);
604 part->act_state = XPC_P_AS_INACTIVE;
605 XPC_SET_REASON(part, xpCloneKThreadFailed, __LINE__);
606 spin_unlock_irqrestore(&part->act_lock, irq_flags);
649 xpc_kthread_waitmsgs(struct xpc_partition *part, struct xpc_channel *ch)
686 struct xpc_partition *part = &xpc_partitions[partid];
696 ch = &part->channels[ch_number];
728 xpc_kthread_waitmsgs(part, ch);
747 atomic_dec_return(&part->nchannels_engaged) == 0) {
748 xpc_arch_ops.indicate_partition_disengaged(part);
756 xpc_part_deref(part);
778 struct xpc_partition *part = &xpc_partitions[ch->partid];
802 atomic_inc_return(&part->nchannels_engaged) == 1) {
803 xpc_arch_ops.indicate_partition_engaged(part);
805 (void)xpc_part_ref(part);
824 atomic_dec_return(&part->nchannels_engaged) == 0) {
825 indicate_partition_disengaged(part);
828 xpc_part_deref(part);
852 struct xpc_partition *part;
858 part = &xpc_partitions[partid];
860 if (!xpc_part_ref(part))
863 ch = &part->channels[ch_number];
866 xpc_part_deref(part);
877 if (part->act_state != XPC_P_AS_DEACTIVATING) {
878 spin_lock(&part->chctl_lock);
879 part->chctl.flags[ch->number] |=
881 spin_unlock(&part->chctl_lock);
891 xpc_wakeup_channel_mgr(part);
893 xpc_part_deref(part);
901 struct xpc_partition *part;
920 part = &xpc_partitions[partid];
922 DBUG_ON((u64)part != L1_CACHE_ALIGN((u64)part));
924 part->activate_IRQ_rcvd = 0;
925 spin_lock_init(&part->act_lock);
926 part->act_state = XPC_P_AS_INACTIVE;
927 XPC_SET_REASON(part, 0, 0);
929 timer_setup(&part->disengage_timer,
932 part->setup_state = XPC_P_SS_UNSET;
933 init_waitqueue_head(&part->teardown_wq);
934 atomic_set(&part->references, 0);
952 struct xpc_partition *part;
984 part = &xpc_partitions[partid];
986 if (xpc_partition_disengaged(part) &&
987 part->act_state == XPC_P_AS_INACTIVE) {
993 XPC_DEACTIVATE_PARTITION(part, reason);
995 if (part->disengage_timeout > disengage_timeout)
996 disengage_timeout = part->disengage_timeout;
1087 struct xpc_partition *part;
1102 part = &xpc_partitions[partid];
1105 part->act_state != XPC_P_AS_INACTIVE) {
1106 xpc_arch_ops.request_partition_deactivation(part);
1107 xpc_arch_ops.indicate_partition_disengaged(part);
1227 dev_set_name(xpc_part, "part");