Message ID | 20181209141744.4787-3-vaibhav@linux.ibm.com |
---|---|
State | Superseded |
Headers | show |
Series | Enable fast-reboot support for CAPI-2 | expand |
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 |
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); >
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 --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);
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(-)