Commit 0e622c4b authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
parents 959f018f 0843ba45
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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;

+4 −8
Original line number Diff line number Diff line
@@ -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",
+1 −1
Original line number Diff line number Diff line
@@ -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);
+1 −2
Original line number Diff line number Diff line
@@ -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);
}
+1 −1
Original line number Diff line number Diff line
@@ -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
Loading