All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Rybchenko <arybchenko@solarflare.com>
To: Jeff Guo <jia.guo@intel.com>, <stephen@networkplumber.org>,
	<bruce.richardson@intel.com>, <ferruh.yigit@intel.com>,
	<konstantin.ananyev@intel.com>, <gaetan.rivet@6wind.com>,
	<jingjing.wu@intel.com>, <thomas@monjalon.net>,
	<motih@mellanox.com>, <matan@mellanox.com>,
	<harry.van.haaren@intel.com>, <qi.z.zhang@intel.com>,
	<shaopeng.he@intel.com>, <bernard.iremonger@intel.com>,
	<arybchenko@solarflare.com>
Cc: <jblunck@infradead.org>, <shreyansh.jain@nxp.com>, <dev@dpdk.org>,
	<helin.zhang@intel.com>
Subject: Re: [PATCH v6 5/7] bus: add helper to handle sigbus
Date: Mon, 9 Jul 2018 09:36:19 +0300	[thread overview]
Message-ID: <b2219cae-9423-8060-2509-348f6582d36b@solarflare.com> (raw)
In-Reply-To: <1531116091-18030-6-git-send-email-jia.guo@intel.com>

On 09.07.2018 09:01, Jeff Guo wrote:
> This patch aim to add a helper to iterate all buses to find the
> corresponding bus to handle the sigbus error.
>
> Signed-off-by: Jeff Guo <jia.guo@intel.com>
> Acked-by: Shaopeng He <shaopeng.he@intel.com>
> ---
> v6->v5:
> refine some coding style.
> ---
>   lib/librte_eal/common/eal_common_bus.c | 42 ++++++++++++++++++++++++++++++++++
>   lib/librte_eal/common/eal_private.h    | 12 ++++++++++
>   2 files changed, 54 insertions(+)
>
> diff --git a/lib/librte_eal/common/eal_common_bus.c b/lib/librte_eal/common/eal_common_bus.c
> index 0943851..8856adc 100644
> --- a/lib/librte_eal/common/eal_common_bus.c
> +++ b/lib/librte_eal/common/eal_common_bus.c
> @@ -37,6 +37,7 @@
>   #include <rte_bus.h>
>   #include <rte_debug.h>
>   #include <rte_string_fns.h>
> +#include <rte_errno.h>
>   
>   #include "eal_private.h"
>   
> @@ -242,3 +243,44 @@ rte_bus_get_iommu_class(void)
>   	}
>   	return mode;
>   }
> +
> +static int
> +bus_handle_sigbus(const struct rte_bus *bus,
> +			const void *failure_addr)
> +{
> +	int ret;
> +
> +	if (!bus->sigbus_handler) {
> +		RTE_LOG(ERR, EAL, "Function sigbus_handler not supported by "
> +			"bus (%s)\n", bus->name);
> +		return -1;
> +	}
> +
> +	ret = bus->sigbus_handler(failure_addr);
> +	rte_errno = ret;
> +
> +	return !(bus->sigbus_handler && ret <= 0);

Since bus->sigbus_handler is checked above, there is no point to check 
it here.

> +}
> +
> +int
> +rte_bus_sigbus_handler(const void *failure_addr)
> +{
> +	struct rte_bus *bus;
> +
> +	int ret = 0;
> +	int old_errno = rte_errno;
> +
> +	rte_errno = 0;
> +
> +	bus = rte_bus_find(NULL, bus_handle_sigbus, failure_addr);
> +	/* failed to handle the sigbus, pass the new errno. */
> +	if (!bus)
> +		ret = 1;
> +	else if (rte_errno == -1)

Is it OK to preserve negative value in rte_errno here? I think no.
rte_errno should have value from corresponding set of errno values.

> +		return -1;
> +
> +	/* otherwise restore the old errno. */
> +	rte_errno = old_errno;
> +
> +	return ret;
> +}
> diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h
> index bdadc4d..2337e71 100644
> --- a/lib/librte_eal/common/eal_private.h
> +++ b/lib/librte_eal/common/eal_private.h
> @@ -258,4 +258,16 @@ int rte_mp_channel_init(void);
>    */
>   void dev_callback_process(char *device_name, enum rte_dev_event_type event);
>   
> +/**
> + * Iterate all buses to find the corresponding bus, to handle the sigbus error.
> + * @param failure_addr
> + *	Pointer of the fault address of the sigbus error.
> + *
> + * @return
> + *	 0 success to handle the sigbus.
> + *	-1 failed to handle the sigbus
> + *	 1 no bus can handler the sigbus
> + */
> +int rte_bus_sigbus_handler(const void *failure_addr);
> +
>   #endif /* _EAL_PRIVATE_H_ */

  reply	other threads:[~2018-07-09  6:36 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-09  6:01 [PATCH v6 0/7] hotplug failure handle mechanism Jeff Guo
2018-07-09  6:01 ` [PATCH v6 1/7] bus: add hotplug failure handler Jeff Guo
2018-07-09  6:01 ` [PATCH v6 2/7] bus/pci: implement hotplug failure handler ops Jeff Guo
2018-07-09  6:01 ` [PATCH v6 3/7] bus: add sigbus handler Jeff Guo
2018-07-09  6:01 ` [PATCH v6 4/7] bus/pci: implement sigbus handler operation Jeff Guo
2018-07-09  6:01 ` [PATCH v6 5/7] bus: add helper to handle sigbus Jeff Guo
2018-07-09  6:36   ` Andrew Rybchenko [this message]
2018-07-09  6:01 ` [PATCH v6 6/7] eal: add failure handle mechanism for hotplug Jeff Guo
2018-07-09  6:47   ` Andrew Rybchenko
2018-07-09  6:01 ` [PATCH v6 7/7] igb_uio: fix uio release issue when hot unplug Jeff Guo
  -- strict thread matches above, loose matches on Subject: below --
2017-06-29  4:37 [PATCH v3 0/2] add uevent api for hot plug Jeff Guo
2018-07-09  6:51 ` [PATCH v6 0/7] hotplug failure handle mechanism Jeff Guo
2018-07-09  6:51   ` [PATCH v6 5/7] bus: add helper to handle sigbus Jeff Guo

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=b2219cae-9423-8060-2509-348f6582d36b@solarflare.com \
    --to=arybchenko@solarflare.com \
    --cc=bernard.iremonger@intel.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=gaetan.rivet@6wind.com \
    --cc=harry.van.haaren@intel.com \
    --cc=helin.zhang@intel.com \
    --cc=jblunck@infradead.org \
    --cc=jia.guo@intel.com \
    --cc=jingjing.wu@intel.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=matan@mellanox.com \
    --cc=motih@mellanox.com \
    --cc=qi.z.zhang@intel.com \
    --cc=shaopeng.he@intel.com \
    --cc=shreyansh.jain@nxp.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    /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.