svn commit: r310418 - in head/sys: dev/xen/evtchn x86/xen xen

John Baldwin jhb at freebsd.org
Thu Dec 22 17:21:09 UTC 2016


On Thursday, December 22, 2016 04:09:44 PM Roger Pau Monné wrote:
> Author: royger
> Date: Thu Dec 22 16:09:44 2016
> New Revision: 310418
> URL: https://svnweb.freebsd.org/changeset/base/310418
> 
> Log:
>   xen: fix IPI setup with EARLY_AP_STARTUP
>   
>   Current Xen IPI setup functions require that the caller provide a device in
>   order to obtain the name of the interrupt from it. With early AP startup this
>   device is no longer available at the point where IPIs are bound, and a KASSERT
>   would trigger:
>   
>   panic: NULL pcpu device_t
>   cpuid = 0
>   KDB: stack backtrace:
>   db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xffffffff82233a20
>   vpanic() at vpanic+0x186/frame 0xffffffff82233aa0
>   kassert_panic() at kassert_panic+0x126/frame 0xffffffff82233b10
>   xen_setup_cpus() at xen_setup_cpus+0x5b/frame 0xffffffff82233b50
>   mi_startup() at mi_startup+0x118/frame 0xffffffff82233b70
>   btext() at btext+0x2c
>   
>   Fix this by no longer requiring the presence of a device in order to bind IPIs,
>   and simply use the "cpuX" format where X is the CPU identifier in order to
>   describe the interrupt.

Thanks for fixing this!

> Modified: head/sys/xen/xen_intr.h
> ==============================================================================
> --- head/sys/xen/xen_intr.h	Thu Dec 22 15:48:54 2016	(r310417)
> +++ head/sys/xen/xen_intr.h	Thu Dec 22 16:09:44 2016	(r310418)
> @@ -143,7 +143,6 @@ int xen_intr_bind_virq(device_t dev, u_i
>   * interupts and, if successful, associate the port with the specified
>   * interrupt handler.
>   *
> - * \param dev       The device making this bind request.
>   * \param cpu       The cpu receiving the IPI.
>   * \param filter    The interrupt filter servicing this IPI.
>   * \param irqflags  Interrupt handler flags.  See sys/bus.h.
> @@ -152,7 +151,7 @@ int xen_intr_bind_virq(device_t dev, u_i
>   *
>   * \returns  0 on success, otherwise an errno.
>   */
> -int xen_intr_alloc_and_bind_ipi(device_t dev, u_int cpu,
> +int xen_intr_alloc_and_bind_ipi(u_int cpu,
>  	driver_filter_t filter, enum intr_type irqflags,
>  	xen_intr_handle_t *handlep);
>  
> @@ -259,7 +258,7 @@ int xen_release_msi(int vector);
>   *
>   * \returns  0 on success, otherwise an errno.
>   */
> -int xen_intr_add_handler(device_t dev, driver_filter_t filter,
> +int xen_intr_add_handler(const char *name, driver_filter_t filter,
>  	driver_intr_t handler, void *arg, enum intr_type flags,
>  	xen_intr_handle_t handle);

Does the doxygen comment above this function need the name arg added?

-- 
John Baldwin


More information about the svn-src-all mailing list