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
next prev parent 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.