diff mbox series

[v2,2/8] core/pci: Introduce a new pci_slot_op named completed_sm_run()

Message ID 20181209141744.4787-3-vaibhav@linux.ibm.com
State Superseded
Headers show
Series Enable fast-reboot support for CAPI-2 | expand

Checks

Context Check Description
snowpatch_ozlabs/apply_patch success master/apply_patch Successfully applied
snowpatch_ozlabs/snowpatch_job_snowpatch-skiboot success Test snowpatch/job/snowpatch-skiboot on branch master

Commit Message

Vaibhav Jain Dec. 9, 2018, 2:17 p.m. UTC
At times we need to perform some cleanup activities when the Opal PCI
state machine that perform creset/freset/hreset (driven by
pci_slot_ops->run_sm which) of a slot completes. One example can be to
mark CAPP attached to a PHB, as deactivated when creset/freset of a
CAPI card slot is completed.

However the calls to pci_slot_ops->run_sm() is scattered through out
the code and patching each call site to check for the return value and
perform custom cleanup tacks is difficult.

Hence this patch introduces a new pci_slot_ops named
completed_sm_run() which should be called when pci_slot_ops->run_sm()
determines that the reset state machine is complete. This provides a
more centralized way to handle slot related cleanup activities.

Signed-off-by: Vaibhav Jain <vaibhav@linux.ibm.com>
---
Change-log

v2: Update the callback signature to return a int64_t back to
    caller. [Andrew]
---
 core/pci-slot.c    | 6 +++++-
 include/pci-slot.h | 1 +
 2 files changed, 6 insertions(+), 1 deletion(-)

Comments

Andrew Donnellan Dec. 10, 2018, 2:39 a.m. UTC | #1
On 10/12/18 1:17 am, Vaibhav Jain wrote:
> At times we need to perform some cleanup activities when the Opal PCI
> state machine that perform creset/freset/hreset (driven by
> pci_slot_ops->run_sm which) of a slot completes. One example can be to
> mark CAPP attached to a PHB, as deactivated when creset/freset of a
> CAPI card slot is completed.
> 
> However the calls to pci_slot_ops->run_sm() is scattered through out
> the code and patching each call site to check for the return value and
> perform custom cleanup tacks is difficult.
> 
> Hence this patch introduces a new pci_slot_ops named
> completed_sm_run() which should be called when pci_slot_ops->run_sm()
> determines that the reset state machine is complete. This provides a
> more centralized way to handle slot related cleanup activities.
> 
> Signed-off-by: Vaibhav Jain <vaibhav@linux.ibm.com>

Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>

> ---
> Change-log
> 
> v2: Update the callback signature to return a int64_t back to
>      caller. [Andrew]
> ---
>   core/pci-slot.c    | 6 +++++-
>   include/pci-slot.h | 1 +
>   2 files changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/core/pci-slot.c b/core/pci-slot.c
> index 71d2769e..497d0a47 100644
> --- a/core/pci-slot.c
> +++ b/core/pci-slot.c
> @@ -104,9 +104,13 @@ static int64_t pci_slot_run_sm(struct pci_slot *slot)
>   		prlog(PR_ERR, PCI_SLOT_PREFIX
>   		      "Invalid state %08x\n", slot->id, slot->state);
>   		pci_slot_set_state(slot, PCI_SLOT_STATE_NORMAL);
> -		return OPAL_HARDWARE;
> +		ret = OPAL_HARDWARE;
>   	}
>   
> +	/* Notify about the pci slot state machine completion */
> +	if (ret <= 0 && slot->ops.completed_sm_run)
> +		slot->ops.completed_sm_run(slot, ret);
> +
>   	return ret;
>   }
>   
> diff --git a/include/pci-slot.h b/include/pci-slot.h
> index cd757535..708374b6 100644
> --- a/include/pci-slot.h
> +++ b/include/pci-slot.h
> @@ -110,6 +110,7 @@ struct pci_slot_ops {
>   	int64_t (*freset)(struct pci_slot *slot);
>   	int64_t (*hreset)(struct pci_slot *slot);
>   	int64_t (*run_sm)(struct pci_slot *slot);
> +	int64_t (*completed_sm_run)(struct pci_slot *slot, uint64_t err);
>   
>   	/* Auxillary functions */
>   	void (*add_properties)(struct pci_slot *slot, struct dt_node *np);
>
Christophe Lombard Dec. 10, 2018, 1:40 p.m. UTC | #2
Le 09/12/2018 à 15:17, Vaibhav Jain a écrit :
> At times we need to perform some cleanup activities when the Opal PCI
> state machine that perform creset/freset/hreset (driven by
> pci_slot_ops->run_sm which) of a slot completes. One example can be to
> mark CAPP attached to a PHB, as deactivated when creset/freset of a
> CAPI card slot is completed.
> 
> However the calls to pci_slot_ops->run_sm() is scattered through out
> the code and patching each call site to check for the return value and
> perform custom cleanup tacks is difficult.
> 
> Hence this patch introduces a new pci_slot_ops named
> completed_sm_run() which should be called when pci_slot_ops->run_sm()
> determines that the reset state machine is complete. This provides a
> more centralized way to handle slot related cleanup activities.
> 
> Signed-off-by: Vaibhav Jain <vaibhav@linux.ibm.com>
> ---
> Change-log
> 

Reviewed-by: Christophe Lombard <clombard@linux.vnet.ibm.com>
diff mbox series

Patch

diff --git a/core/pci-slot.c b/core/pci-slot.c
index 71d2769e..497d0a47 100644
--- a/core/pci-slot.c
+++ b/core/pci-slot.c
@@ -104,9 +104,13 @@  static int64_t pci_slot_run_sm(struct pci_slot *slot)
 		prlog(PR_ERR, PCI_SLOT_PREFIX
 		      "Invalid state %08x\n", slot->id, slot->state);
 		pci_slot_set_state(slot, PCI_SLOT_STATE_NORMAL);
-		return OPAL_HARDWARE;
+		ret = OPAL_HARDWARE;
 	}
 
+	/* Notify about the pci slot state machine completion */
+	if (ret <= 0 && slot->ops.completed_sm_run)
+		slot->ops.completed_sm_run(slot, ret);
+
 	return ret;
 }
 
diff --git a/include/pci-slot.h b/include/pci-slot.h
index cd757535..708374b6 100644
--- a/include/pci-slot.h
+++ b/include/pci-slot.h
@@ -110,6 +110,7 @@  struct pci_slot_ops {
 	int64_t (*freset)(struct pci_slot *slot);
 	int64_t (*hreset)(struct pci_slot *slot);
 	int64_t (*run_sm)(struct pci_slot *slot);
+	int64_t (*completed_sm_run)(struct pci_slot *slot, uint64_t err);
 
 	/* Auxillary functions */
 	void (*add_properties)(struct pci_slot *slot, struct dt_node *np);