All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: linuxppc-dev@ozlabs.org
Subject: Re: [PATCH v2 04/10] powerpc/xive: Native exploitation of the XIVE interrupt controller
Date: Thu, 06 Apr 2017 09:00:30 +1000	[thread overview]
Message-ID: <1491433230.4166.96.camel@kernel.crashing.org> (raw)
In-Reply-To: <201704060615.jhUAdOZN%fengguang.wu@intel.com>

On Thu, 2017-04-06 at 06:46 +0800, kbuild test robot wrote:
> Hi Benjamin,
> 
> [auto build test ERROR on powerpc/next]
> [also build test ERROR on v4.11-rc5 next-20170405]
> [if your patch is applied to the wrong git tree, please drop us a
> note to help improve the system]

Ooops, I was 1 patch off in my git send-email, forgetting the
opal-api.h updates. I'm sending the pre-req patch separately.

Cheers,
Ben.

> url:    https://github.com/0day-ci/linux/commits/Benjamin-
> Herrenschmidt/powerpc-Add-more-PPC-bit-conversion-macros/20170406-
> 041935
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
> .git next
> config: powerpc-defconfig (attached as .config)
> compiler: powerpc64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
> reproduce:
>         wget https://raw.githubusercontent.com/01org/lkp-tests/master
> /sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # save the attached .config to linux build tree
>         make.cross ARCH=powerpc 
> 
> All errors (new ones prefixed by >>):
> 
>    arch/powerpc/sysdev/xive/native.c: In function
> 'xive_native_populate_irq_data':
> > > arch/powerpc/sysdev/xive/native.c:55:7: error: implicit
> > > declaration of function 'opal_xive_get_irq_info' [-
> > > Werror=implicit-function-declaration]
> 
>      rc = opal_xive_get_irq_info(hw_irq, &flags, &eoi_page,
> &trig_page,
>           ^~~~~~~~~~~~~~~~~~~~~~
> > > arch/powerpc/sysdev/xive/native.c:64:19: error:
> > > 'OPAL_XIVE_IRQ_STORE_EOI' undeclared (first use in this function)
> 
>      if (opal_flags & OPAL_XIVE_IRQ_STORE_EOI)
>                       ^~~~~~~~~~~~~~~~~~~~~~~
>    arch/powerpc/sysdev/xive/native.c:64:19: note: each undeclared
> identifier is reported only once for each function it appears in
> > > arch/powerpc/sysdev/xive/native.c:66:19: error:
> > > 'OPAL_XIVE_IRQ_LSI' undeclared (first use in this function)
> 
>      if (opal_flags & OPAL_XIVE_IRQ_LSI)
>                       ^~~~~~~~~~~~~~~~~
> > > arch/powerpc/sysdev/xive/native.c:68:19: error:
> > > 'OPAL_XIVE_IRQ_SHIFT_BUG' undeclared (first use in this function)
> 
>      if (opal_flags & OPAL_XIVE_IRQ_SHIFT_BUG)
>                       ^~~~~~~~~~~~~~~~~~~~~~~
> > > arch/powerpc/sysdev/xive/native.c:70:19: error:
> > > 'OPAL_XIVE_IRQ_MASK_VIA_FW' undeclared (first use in this
> > > function)
> 
>      if (opal_flags & OPAL_XIVE_IRQ_MASK_VIA_FW)
>                       ^~~~~~~~~~~~~~~~~~~~~~~~~
> > > arch/powerpc/sysdev/xive/native.c:72:19: error:
> > > 'OPAL_XIVE_IRQ_EOI_VIA_FW' undeclared (first use in this
> > > function)
> 
>      if (opal_flags & OPAL_XIVE_IRQ_EOI_VIA_FW)
>                       ^~~~~~~~~~~~~~~~~~~~~~~~
>    arch/powerpc/sysdev/xive/native.c: In function
> 'xive_native_configure_irq':
> > > arch/powerpc/sysdev/xive/native.c:105:8: error: implicit
> > > declaration of function 'opal_xive_set_irq_config' [-
> > > Werror=implicit-function-declaration]
> 
>       rc = opal_xive_set_irq_config(hw_irq, target, prio, sw_irq);
>            ^~~~~~~~~~~~~~~~~~~~~~~~
>    arch/powerpc/sysdev/xive/native.c: In function
> 'xive_native_configure_queue':
> > > arch/powerpc/sysdev/xive/native.c:135:7: error: implicit
> > > declaration of function 'opal_xive_get_queue_info' [-
> > > Werror=implicit-function-declaration]
> 
>      rc = opal_xive_get_queue_info(vp_id, prio, NULL, NULL,
>           ^~~~~~~~~~~~~~~~~~~~~~~~
> > > arch/powerpc/sysdev/xive/native.c:148:10: error:
> > > 'OPAL_XIVE_EQ_ALWAYS_NOTIFY' undeclared (first use in this
> > > function)
> 
>      flags = OPAL_XIVE_EQ_ALWAYS_NOTIFY | OPAL_XIVE_EQ_ENABLED;
>              ^~~~~~~~~~~~~~~~~~~~~~~~~~
> > > arch/powerpc/sysdev/xive/native.c:148:39: error:
> > > 'OPAL_XIVE_EQ_ENABLED' undeclared (first use in this function)
> 
>      flags = OPAL_XIVE_EQ_ALWAYS_NOTIFY | OPAL_XIVE_EQ_ENABLED;
>                                           ^~~~~~~~~~~~~~~~~~~~
> > > arch/powerpc/sysdev/xive/native.c:153:12: error:
> > > 'OPAL_XIVE_EQ_ESCALATE' undeclared (first use in this function)
> 
>       flags |= OPAL_XIVE_EQ_ESCALATE;
>                ^~~~~~~~~~~~~~~~~~~~~
> > > arch/powerpc/sysdev/xive/native.c:158:8: error: implicit
> > > declaration of function 'opal_xive_set_queue_info' [-
> > > Werror=implicit-function-declaration]
> 
>       rc = opal_xive_set_queue_info(vp_id, prio, qpage_phys, order,
> flags);
>            ^~~~~~~~~~~~~~~~~~~~~~~~
>    arch/powerpc/sysdev/xive/native.c: In function
> 'xive_native_get_ipi':
> > > arch/powerpc/sysdev/xive/native.c:254:9: error: implicit
> > > declaration of function 'opal_xive_allocate_irq' [-
> > > Werror=implicit-function-declaration]
> 
>       irq = opal_xive_allocate_irq(chip_id);
>             ^~~~~~~~~~~~~~~~~~~~~~
>    arch/powerpc/sysdev/xive/native.c: In function
> 'xive_native_alloc_irq':
> > > arch/powerpc/sysdev/xive/native.c:275:31: error:
> > > 'OPAL_XIVE_ANY_CHIP' undeclared (first use in this function)
> 
>       rc = opal_xive_allocate_irq(OPAL_XIVE_ANY_CHIP);
>                                   ^~~~~~~~~~~~~~~~~~
>    arch/powerpc/sysdev/xive/native.c: In function
> 'xive_native_free_irq':
> > > arch/powerpc/sysdev/xive/native.c:288:12: error: implicit
> > > declaration of function 'opal_xive_free_irq' [-Werror=implicit-
> > > function-declaration]
> 
>       s64 rc = opal_xive_free_irq(irq);
>                ^~~~~~~~~~~~~~~~~~
>    arch/powerpc/sysdev/xive/native.c: In function
> 'xive_native_shutdown':
> > > arch/powerpc/sysdev/xive/native.c:317:2: error: implicit
> > > declaration of function 'opal_xive_reset' [-Werror=implicit-
> > > function-declaration]
> 
>      opal_xive_reset(OPAL_XIVE_MODE_EMU);
>      ^~~~~~~~~~~~~~~
> > > arch/powerpc/sysdev/xive/native.c:317:18: error:
> > > 'OPAL_XIVE_MODE_EMU' undeclared (first use in this function)
> 
>      opal_xive_reset(OPAL_XIVE_MODE_EMU);
>                      ^~~~~~~~~~~~~~~~~~
>    arch/powerpc/sysdev/xive/native.c: In function
> 'xive_native_setup_cpu':
> > > arch/powerpc/sysdev/xive/native.c:392:8: error: implicit
> > > declaration of function 'opal_xive_set_vp_info' [-
> > > Werror=implicit-function-declaration]
> 
>       rc = opal_xive_set_vp_info(vp, OPAL_XIVE_VP_ENABLED, 0);
>            ^~~~~~~~~~~~~~~~~~~~~
> > > arch/powerpc/sysdev/xive/native.c:392:34: error:
> > > 'OPAL_XIVE_VP_ENABLED' undeclared (first use in this function)
> 
>       rc = opal_xive_set_vp_info(vp, OPAL_XIVE_VP_ENABLED, 0);
>                                      ^~~~~~~~~~~~~~~~~~~~
> > > arch/powerpc/sysdev/xive/native.c:403:7: error: implicit
> > > declaration of function 'opal_xive_get_vp_info' [-
> > > Werror=implicit-function-declaration]
> 
>      rc = opal_xive_get_vp_info(vp, NULL, &vp_cam_be, NULL, NULL);
>           ^~~~~~~~~~~~~~~~~~~~~
>    arch/powerpc/sysdev/xive/native.c: In function
> 'xive_native_sync_source':
> --
>    arch/powerpc/xmon/xmon.c: In function 'dump_one_xive':
> > > arch/powerpc/xmon/xmon.c:2352:2: error: implicit declaration of
> > > function 'opal_xive_dump' [-Werror=implicit-function-declaration]
> 
>      opal_xive_dump(XIVE_DUMP_TM_HYP, hwid);
>      ^~~~~~~~~~~~~~
> > > arch/powerpc/xmon/xmon.c:2352:17: error: 'XIVE_DUMP_TM_HYP'
> > > undeclared (first use in this function)
> 
>      opal_xive_dump(XIVE_DUMP_TM_HYP, hwid);
>                     ^~~~~~~~~~~~~~~~
>    arch/powerpc/xmon/xmon.c:2352:17: note: each undeclared identifier
> is reported only once for each function it appears in
> > > arch/powerpc/xmon/xmon.c:2353:17: error: 'XIVE_DUMP_TM_POOL'
> > > undeclared (first use in this function)
> 
>      opal_xive_dump(XIVE_DUMP_TM_POOL, hwid);
>                     ^~~~~~~~~~~~~~~~~
> > > arch/powerpc/xmon/xmon.c:2354:17: error: 'XIVE_DUMP_TM_OS'
> > > undeclared (first use in this function)
> 
>      opal_xive_dump(XIVE_DUMP_TM_OS, hwid);
>                     ^~~~~~~~~~~~~~~
> > > arch/powerpc/xmon/xmon.c:2355:17: error: 'XIVE_DUMP_TM_USER'
> > > undeclared (first use in this function)
> 
>      opal_xive_dump(XIVE_DUMP_TM_USER, hwid);
>                     ^~~~~~~~~~~~~~~~~
> > > arch/powerpc/xmon/xmon.c:2356:17: error: 'XIVE_DUMP_VP'
> > > undeclared (first use in this function)
> 
>      opal_xive_dump(XIVE_DUMP_VP, hwid);
>                     ^~~~~~~~~~~~
> > > arch/powerpc/xmon/xmon.c:2357:17: error: 'XIVE_DUMP_EMU_STATE'
> > > undeclared (first use in this function)
> 
>      opal_xive_dump(XIVE_DUMP_EMU_STATE, hwid);
>                     ^~~~~~~~~~~~~~~~~~~
>    arch/powerpc/xmon/xmon.c: In function 'dump_one_xive_irq':
> > > arch/powerpc/xmon/xmon.c:2393:7: error: implicit declaration of
> > > function 'opal_xive_get_irq_config' [-Werror=implicit-function-
> > > declaration]
> 
>      rc = opal_xive_get_irq_config(num, &vp, &prio, &lirq);
>           ^~~~~~~~~~~~~~~~~~~~~~~~
>    cc1: all warnings being treated as errors
> 
> vim +/opal_xive_get_irq_info +55 arch/powerpc/sysdev/xive/native.c
> 
>     49		__be32 esb_shift, src_chip;
>     50		u64 opal_flags;
>     51		s64 rc;
>     52	
>     53		memset(data, 0, sizeof(*data));
>     54	
>   > 55		rc = opal_xive_get_irq_info(hw_irq, &flags,
> &eoi_page, &trig_page,
>     56					    &esb_shift,
> &src_chip);
>     57		if (rc) {
>     58			pr_err("XIVE:
> opal_xive_get_irq_info(0x%x) returned %lld\n",
>     59			       hw_irq, rc);
>     60			return -EINVAL;
>     61		}
>     62	
>     63		opal_flags = be64_to_cpu(flags);
>   > 64		if (opal_flags & OPAL_XIVE_IRQ_STORE_EOI)
>     65			data->flags |= XIVE_IRQ_FLAG_STORE_EOI;
>   > 66		if (opal_flags & OPAL_XIVE_IRQ_LSI)
>     67			data->flags |= XIVE_IRQ_FLAG_LSI;
>   > 68		if (opal_flags & OPAL_XIVE_IRQ_SHIFT_BUG)
>     69			data->flags |= XIVE_IRQ_FLAG_SHIFT_BUG;
>   > 70		if (opal_flags & OPAL_XIVE_IRQ_MASK_VIA_FW)
>     71			data->flags |= XIVE_IRQ_FLAG_MASK_FW;
>   > 72		if (opal_flags & OPAL_XIVE_IRQ_EOI_VIA_FW)
>     73			data->flags |= XIVE_IRQ_FLAG_EOI_FW;
>     74		data->eoi_page = be64_to_cpu(eoi_page);
>     75		data->trig_page = be64_to_cpu(trig_page);
>     76		data->esb_shift = be32_to_cpu(esb_shift);
>     77		data->src_chip = be32_to_cpu(src_chip);
>     78	
>     79		data->eoi_mmio = ioremap(data->eoi_page, 1u <<
> data->esb_shift);
>     80		if (!data->eoi_mmio) {
>     81			pr_err("XIVE: Failed to map EOI page
> for irq 0x%x\n", hw_irq);
>     82			return -ENOMEM;
>     83		}
>     84	
>     85		if (!data->trig_page)
>     86			return 0;
>     87		if (data->trig_page == data->eoi_page) {
>     88			data->trig_mmio = data->eoi_mmio;
>     89			return 0;
>     90		}
>     91	
>     92		data->trig_mmio = ioremap(data->trig_page, 1u
> << data->esb_shift);
>     93		if (!data->trig_mmio) {
>     94			pr_err("XIVE: Failed to map trigger
> page for irq 0x%x\n", hw_irq);
>     95			return -ENOMEM;
>     96		}
>     97		return 0;
>     98	}
>     99	
>    100	int xive_native_configure_irq(u32 hw_irq, u32 target,
> u8 prio, u32 sw_irq)
>    101	{
>    102		s64 rc;
>    103	
>    104		for (;;) {
>  > 105			rc = opal_xive_set_irq_config(hw_irq,
> target, prio, sw_irq);
>    106			if (rc != OPAL_BUSY)
>    107				break;
>    108			msleep(1);
>    109		}
>    110		return rc == 0 ? 0 : -ENXIO;
>    111	}
>    112	
>    113	/* This can be called multiple time to change a queue
> configuration */
>    114	int xive_native_configure_queue(u32 vp_id, struct
> xive_q *q, u8 prio,
>    115					__be32 *qpage, u32
> order, bool can_escalate)
>    116	{
>    117		s64 rc = 0;
>    118		__be64 qeoi_page_be;
>    119		__be32 esc_irq_be;
>    120		u64 flags, qpage_phys;
>    121	
>    122		/* If there's an actual queue page, clean it */
>    123		if (order) {
>    124			if (WARN_ON(!qpage))
>    125				return -EINVAL;
>    126			qpage_phys = __pa(qpage);
>    127		} else
>    128			qpage_phys = 0;
>    129	
>    130		/* Initialize the rest of the fields */
>    131		q->msk = order ? ((1u << (order - 2)) - 1) : 0;
>    132		q->idx = 0;
>    133		q->toggle = 0;
>    134	
>  > 135		rc = opal_xive_get_queue_info(vp_id, prio,
> NULL, NULL,
>    136					      &qeoi_page_be,
>    137					      &esc_irq_be,
>    138					      NULL);
>    139		if (rc) {
>    140			pr_err("XIVE: Error %lld getting queue
> info prio %d\n",
>    141			       rc, prio);
>    142			rc = -EIO;
>    143			goto fail;
>    144		}
>    145		q->eoi_phys = be64_to_cpu(qeoi_page_be);
>    146	
>    147		/* Default flags */
>  > 148		flags = OPAL_XIVE_EQ_ALWAYS_NOTIFY |
> OPAL_XIVE_EQ_ENABLED;
>    149	
>    150		/* Escalation needed ? */
>    151		if (can_escalate) {
>    152			q->esc_irq = be32_to_cpu(esc_irq_be);
>  > 153			flags |= OPAL_XIVE_EQ_ESCALATE;
>    154		}
>    155	
>    156		/* Configure and enable the queue in HW */
>    157		for (;;) {
>  > 158			rc = opal_xive_set_queue_info(vp_id,
> prio, qpage_phys, order, flags);
>    159			if (rc != OPAL_BUSY)
>    160				break;
>    161			msleep(1);
>    162		}
>    163		if (rc) {
>    164			pr_err("XIVE: Error %lld setting queue
> for prio %d\n",
>    165			       rc, prio);
>    166			rc = -EIO;
>    167		} else {
>    168			/*
>    169			 * KVM code requires all of the above
> to be visible before
>    170			 * q->qpage is set due to how it
> manages IPI EOIs
>    171			 */
>    172			wmb();
>    173			q->qpage = qpage;
>    174		}
>    175	 fail:
>    176		return rc;
>    177	}
>    178	
>    179	static void __xive_native_disable_queue(u32 vp_id,
> struct xive_q *q, u8 prio)
>    180	{
>    181		s64 rc;
>    182	
>    183		/* Disable the queue in HW */
>    184		for (;;) {
>    185			rc = opal_xive_set_queue_info(vp_id,
> prio, 0, 0, 0);
>    186				break;
>    187			msleep(1);
>    188		}
>    189		if (rc)
>    190			pr_err("XIVE: Error %lld disabling
> queue for prio %d\n",
>    191			       rc, prio);
>    192	}
>    193	
>    194	void xive_native_disable_queue(u32 vp_id, struct xive_q
> *q, u8 prio)
>    195	{
>    196		__xive_native_disable_queue(vp_id, q, prio);
>    197	}
>    198	
>    199	static int xive_native_setup_queue(unsigned int cpu,
> struct xive_cpu *xc, u8 prio)
>    200	{
>    201		struct xive_q *q = &xc->queue[prio];
>    202		unsigned int alloc_order;
>    203		struct page *pages;
>    204		__be32 *qpage;
>    205	
>    206		alloc_order = (xive_queue_shift > PAGE_SHIFT) ?
>    207			(xive_queue_shift - PAGE_SHIFT) : 0;
>    208		pages = alloc_pages_node(cpu_to_node(cpu),
> GFP_KERNEL, alloc_order);
>    209		if (!pages)
>    210			return -ENOMEM;
>    211		qpage = (__be32 *)page_address(pages);
>    212		memset(qpage, 0, 1 << xive_queue_shift);
>    213		return
> xive_native_configure_queue(get_hard_smp_processor_id(cpu),
>    214						   q, prio,
> qpage, xive_queue_shift, false);
>    215	}
>    216	
>    217	static void xive_native_cleanup_queue(unsigned int cpu,
> struct xive_cpu *xc, u8 prio)
>    218	{
>    219		struct xive_q *q = &xc->queue[prio];
>    220		unsigned int alloc_order;
>    221	
>    222		/*
>    223		 * We use the variant with no iounmap as this
> is called on exec
>    224		 * from an IPI and iounmap isn't safe
>    225		 */
>    226		__xive_native_disable_queue(get_hard_smp_proces
> sor_id(cpu), q, prio);
>    227		alloc_order = (xive_queue_shift > PAGE_SHIFT) ?
>    228			(xive_queue_shift - PAGE_SHIFT) : 0;
>    229		free_pages((unsigned long)q->qpage,
> alloc_order);
>    230		q->qpage = NULL;
>    231	}
>    232	
>    233	static bool xive_native_match(struct device_node *node)
>    234	{
>    235		return of_device_is_compatible(node, "ibm,opal-
> xive-vc");
>    236	}
>    237	
>    238	#ifdef CONFIG_SMP
>    239	static int xive_native_get_ipi(unsigned int cpu, struct
> xive_cpu *xc)
>    240	{
>    241		struct device_node *np;
>    242		unsigned int chip_id;
>    243		s64 irq;
>    244	
>    245		/* Find the chip ID */
>    246		np = of_get_cpu_node(cpu, NULL);
>    247		if (np) {
>    248			if (of_property_read_u32(np, "ibm,chip-
> id", &chip_id) < 0)
>    249				chip_id = 0;
>    250		}
>    251	
>    252		/* Allocate an IPI and populate info about it
> */
>    253		for (;;) {
>  > 254			irq = opal_xive_allocate_irq(chip_id);
>    255			if (irq == OPAL_BUSY) {
>    256				msleep(1);
>    257				continue;
> 
> ---
> 0-DAY kernel test infrastructure                Open Source
> Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel
> Corporation

  reply	other threads:[~2017-04-05 23:00 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-05  7:54 [PATCH v2 01/10] powerpc: Add more PPC bit conversion macros Benjamin Herrenschmidt
2017-04-05  7:54 ` [PATCH v2 02/10] powerpc: Add optional smp_ops->prepare_cpu SMP callback Benjamin Herrenschmidt
2017-04-05  7:54 ` [PATCH v2 03/10] powerpc/smp: Remove migrate_irq() custom implementation Benjamin Herrenschmidt
2017-04-05  7:54 ` [PATCH v2 04/10] powerpc/xive: Native exploitation of the XIVE interrupt controller Benjamin Herrenschmidt
2017-04-05 22:46   ` kbuild test robot
2017-04-05 23:00     ` Benjamin Herrenschmidt [this message]
2017-04-05  7:54 ` [PATCH v2 05/10] powerpc/kvm: Massage order of #include Benjamin Herrenschmidt
2017-04-05  7:54 ` [PATCH v2 06/10] powerpc/kvm: Make kvmppc_xics_create_icp static Benjamin Herrenschmidt
2017-04-05  7:54 ` [PATCH v2 07/10] powerpc/kvm: Remove obsolete kvm_vm_ioctl_xics_irq declaration Benjamin Herrenschmidt
2017-04-05  7:54 ` [PATCH v2 08/10] powerpc: Consolidate variants of real-mode MMIOs Benjamin Herrenschmidt
2017-04-05  7:54 ` [PATCH v2 09/10] powerpc: Fixup LPCR:PECE and HEIC setting on POWER9 Benjamin Herrenschmidt
2017-04-05  7:54 ` [PATCH v2 10/10] powerpc/kvm: Native usage of the XIVE interrupt controller Benjamin Herrenschmidt
2017-04-06  0:00   ` kbuild test robot
2017-04-12 11:40 ` [v2,01/10] powerpc: Add more PPC bit conversion macros Michael Ellerman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1491433230.4166.96.camel@kernel.crashing.org \
    --to=benh@kernel.crashing.org \
    --cc=linuxppc-dev@ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.