Merge tag 'powerpc-6.18-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
Pull powerpc fixes from Madhavan Srinivasan: - Fix to handle NULL pointer dereference at irq domain teardown - Fix for handling extraction of struct xive_irq_data - Fix to skip parameter area allocation when fadump disabled Thanks to Ganesh Goudar, Hari Bathini, Nam Cao, Ritesh Harjani (IBM), Sourabh Jain, and Venkat Rao Bagalkote, * tag 'powerpc-6.18-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: powerpc/fadump: skip parameter area allocation when fadump is disabled powerpc, ocxl: Fix extraction of struct xive_irq_data powerpc/pseries/msi: Fix NULL pointer dereference at irq domain teardown
This commit is contained in:
commit
0e622c4b0e
6 files changed
+11
-13
No files matched your search
@@ -1747,6 +1747,9 @@ void __init fadump_setup_param_area(void)
|
||||
{
|
||||
phys_addr_t range_start, range_end;
|
||||
|
||||
if (!fw_dump.fadump_enabled)
|
||||
return;
|
||||
|
||||
if (!fw_dump.param_area_supported || fw_dump.dump_active)
|
||||
return;
|
||||
|
||||
|
||||
@@ -916,8 +916,7 @@ int kvmppc_xive_attach_escalation(struct kvm_vcpu *vcpu, u8 prio,
|
||||
* it fires once.
|
||||
*/
|
||||
if (single_escalation) {
|
||||
struct irq_data *d = irq_get_irq_data(xc->esc_virq[prio]);
|
||||
struct xive_irq_data *xd = irq_data_get_irq_handler_data(d);
|
||||
struct xive_irq_data *xd = irq_get_chip_data(xc->esc_virq[prio]);
|
||||
|
||||
xive_vm_esb_load(xd, XIVE_ESB_SET_PQ_01);
|
||||
vcpu->arch.xive_esc_raddr = xd->eoi_page;
|
||||
@@ -1612,7 +1611,7 @@ int kvmppc_xive_set_mapped(struct kvm *kvm, unsigned long guest_irq,
|
||||
|
||||
/* Grab info about irq */
|
||||
state->pt_number = hw_irq;
|
||||
state->pt_data = irq_data_get_irq_handler_data(host_data);
|
||||
state->pt_data = irq_data_get_irq_chip_data(host_data);
|
||||
|
||||
/*
|
||||
* Configure the IRQ to match the existing configuration of
|
||||
@@ -1787,8 +1786,7 @@ void kvmppc_xive_disable_vcpu_interrupts(struct kvm_vcpu *vcpu)
|
||||
*/
|
||||
void xive_cleanup_single_escalation(struct kvm_vcpu *vcpu, int irq)
|
||||
{
|
||||
struct irq_data *d = irq_get_irq_data(irq);
|
||||
struct xive_irq_data *xd = irq_data_get_irq_handler_data(d);
|
||||
struct xive_irq_data *xd = irq_get_chip_data(irq);
|
||||
|
||||
/*
|
||||
* This slightly odd sequence gives the right result
|
||||
@@ -2827,9 +2825,7 @@ int kvmppc_xive_debug_show_queues(struct seq_file *m, struct kvm_vcpu *vcpu)
|
||||
i0, i1);
|
||||
}
|
||||
if (xc->esc_virq[i]) {
|
||||
struct irq_data *d = irq_get_irq_data(xc->esc_virq[i]);
|
||||
struct xive_irq_data *xd =
|
||||
irq_data_get_irq_handler_data(d);
|
||||
struct xive_irq_data *xd = irq_get_chip_data(xc->esc_virq[i]);
|
||||
u64 pq = xive_vm_esb_load(xd, XIVE_ESB_GET);
|
||||
|
||||
seq_printf(m, " ESC %d %c%c EOI @%llx",
|
||||
|
||||
@@ -121,7 +121,7 @@ static int init_vas_instance(struct platform_device *pdev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
xd = irq_get_handler_data(vinst->virq);
|
||||
xd = irq_get_chip_data(vinst->virq);
|
||||
if (!xd) {
|
||||
pr_err("Inst%d: Invalid virq %d\n",
|
||||
vinst->vas_id, vinst->virq);
|
||||
|
||||
@@ -443,8 +443,7 @@ static int pseries_msi_ops_prepare(struct irq_domain *domain, struct device *dev
|
||||
*/
|
||||
static void pseries_msi_ops_teardown(struct irq_domain *domain, msi_alloc_info_t *arg)
|
||||
{
|
||||
struct msi_desc *desc = arg->desc;
|
||||
struct pci_dev *pdev = msi_desc_to_pci_dev(desc);
|
||||
struct pci_dev *pdev = to_pci_dev(domain->dev);
|
||||
|
||||
rtas_disable_msi(pdev);
|
||||
}
|
||||
|
||||
@@ -1580,7 +1580,7 @@ static void xive_flush_cpu_queue(unsigned int cpu, struct xive_cpu *xc)
|
||||
cpu, irq);
|
||||
#endif
|
||||
raw_spin_lock(&desc->lock);
|
||||
xd = irq_desc_get_handler_data(desc);
|
||||
xd = irq_desc_get_chip_data(desc);
|
||||
|
||||
/*
|
||||
* Clear saved_p to indicate that it's no longer pending
|
||||
|
||||
@@ -203,7 +203,7 @@ u64 ocxl_afu_irq_get_addr(struct ocxl_context *ctx, int irq_id)
|
||||
mutex_lock(&ctx->irq_lock);
|
||||
irq = idr_find(&ctx->irq_idr, irq_id);
|
||||
if (irq) {
|
||||
xd = irq_get_handler_data(irq->virq);
|
||||
xd = irq_get_chip_data(irq->virq);
|
||||
addr = xd ? xd->trig_page : 0;
|
||||
}
|
||||
mutex_unlock(&ctx->irq_lock);
|
||||
|
||||
Reference in new issue
Block a user