From: Tariq Toukan <tariqt@mellanox.com>
To: "David S. Miller" <davem@davemloft.net>
Cc: netdev@vger.kernel.org, Eran Ben Elisha <eranbe@mellanox.com>,
Matan Barak <matanb@mellanox.com>,
Tariq Toukan <tariqt@mellanox.com>
Subject: [PATCH net-next 4/9] net/mlx4_core: Add resource alloc/dealloc debugging
Date: Mon, 16 Jan 2017 19:30:00 +0200 [thread overview]
Message-ID: <1484587805-12666-5-git-send-email-tariqt@mellanox.com> (raw)
In-Reply-To: <1484587805-12666-1-git-send-email-tariqt@mellanox.com>
From: Matan Barak <matanb@mellanox.com>
In order to aid debugging of functions that take a resource but
don't put it, add the last function name that successfully grabbed
this resource.
Signed-off-by: Matan Barak <matanb@mellanox.com>
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
---
.../net/ethernet/mellanox/mlx4/resource_tracker.c | 49 ++++++++++++++++++++--
1 file changed, 45 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
index 13cb47363db6..f7507d676c57 100644
--- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
+++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
@@ -77,6 +77,7 @@ struct res_common {
int from_state;
int to_state;
int removing;
+ const char *func_name;
};
enum {
@@ -837,6 +838,36 @@ static int mpt_mask(struct mlx4_dev *dev)
return dev->caps.num_mpts - 1;
}
+static const char *mlx4_resource_type_to_str(enum mlx4_resource t)
+{
+ switch (t) {
+ case RES_QP:
+ return "QP";
+ case RES_CQ:
+ return "CQ";
+ case RES_SRQ:
+ return "SRQ";
+ case RES_XRCD:
+ return "XRCD";
+ case RES_MPT:
+ return "MPT";
+ case RES_MTT:
+ return "MTT";
+ case RES_MAC:
+ return "MAC";
+ case RES_VLAN:
+ return "VLAN";
+ case RES_COUNTER:
+ return "COUNTER";
+ case RES_FS_RULE:
+ return "FS_RULE";
+ case RES_EQ:
+ return "EQ";
+ default:
+ return "INVALID RESOURCE";
+ }
+}
+
static void *find_res(struct mlx4_dev *dev, u64 res_id,
enum mlx4_resource type)
{
@@ -846,9 +877,9 @@ static void *find_res(struct mlx4_dev *dev, u64 res_id,
res_id);
}
-static int get_res(struct mlx4_dev *dev, int slave, u64 res_id,
- enum mlx4_resource type,
- void *res)
+static int _get_res(struct mlx4_dev *dev, int slave, u64 res_id,
+ enum mlx4_resource type,
+ void *res, const char *func_name)
{
struct res_common *r;
int err = 0;
@@ -861,6 +892,10 @@ static int get_res(struct mlx4_dev *dev, int slave, u64 res_id,
}
if (r->state == RES_ANY_BUSY) {
+ mlx4_warn(dev,
+ "%s(%d) trying to get resource %llx of type %s, but it's already taken by %s\n",
+ func_name, slave, res_id, mlx4_resource_type_to_str(type),
+ r->func_name);
err = -EBUSY;
goto exit;
}
@@ -872,6 +907,7 @@ static int get_res(struct mlx4_dev *dev, int slave, u64 res_id,
r->from_state = r->state;
r->state = RES_ANY_BUSY;
+ r->func_name = func_name;
if (res)
*((struct res_common **)res) = r;
@@ -881,6 +917,9 @@ static int get_res(struct mlx4_dev *dev, int slave, u64 res_id,
return err;
}
+#define get_res(dev, slave, res_id, type, res) \
+ _get_res((dev), (slave), (res_id), (type), (res), __func__)
+
int mlx4_get_slave_from_resource_id(struct mlx4_dev *dev,
enum mlx4_resource type,
u64 res_id, int *slave)
@@ -911,8 +950,10 @@ static void put_res(struct mlx4_dev *dev, int slave, u64 res_id,
spin_lock_irq(mlx4_tlock(dev));
r = find_res(dev, res_id, type);
- if (r)
+ if (r) {
r->state = r->from_state;
+ r->func_name = "";
+ }
spin_unlock_irq(mlx4_tlock(dev));
}
--
1.8.3.1
next prev parent reply other threads:[~2017-01-16 17:30 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-16 17:29 [PATCH net-next 0/9] mlx4 misc improvements Tariq Toukan
2017-01-16 17:29 ` [PATCH net-next 1/9] net/mlx4: Replace ENOSYS with better fitting error codes Tariq Toukan
2017-01-16 17:29 ` [PATCH net-next 2/9] net/mlx4_core: Device revision support Tariq Toukan
2017-01-16 17:29 ` [PATCH net-next 3/9] net/mlx4_core: Set EQ affinity hint to local NUMA CPUs Tariq Toukan
2017-01-16 21:44 ` Or Gerlitz
2017-01-16 21:54 ` Daniel Jurgens
2017-01-16 21:57 ` David Miller
2017-01-16 21:59 ` Or Gerlitz
2017-01-16 22:21 ` Daniel Jurgens
2017-01-16 17:30 ` Tariq Toukan [this message]
2017-01-16 17:30 ` [PATCH net-next 5/9] net/mlx4_core: Get num_tc using netdev_get_num_tc Tariq Toukan
2017-01-16 17:30 ` [PATCH net-next 6/9] net/mlx4_en: Adding support of turning off link autonegotiation via ethtool Tariq Toukan
2017-01-16 21:48 ` Or Gerlitz
2017-01-16 23:08 ` Ariel Levkovich
2017-01-17 7:20 ` Or Gerlitz
2017-01-17 7:21 ` Or Gerlitz
2017-01-16 17:30 ` [PATCH net-next 7/9] net/mlx4_en: Pass user MTU value to Firmware at set port command Tariq Toukan
2017-01-16 17:30 ` [PATCH net-next 8/9] net/mlx4_en: Check the enabling mtu flag in SET_PORT wrapper flow Tariq Toukan
2017-01-16 17:30 ` [PATCH net-next 9/9] net/mlx4_en: Check the enabling pptx/pprx flags " Tariq Toukan
2017-01-17 19:49 ` [PATCH net-next 0/9] mlx4 misc improvements David Miller
2017-01-19 8:32 ` Tariq Toukan
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=1484587805-12666-5-git-send-email-tariqt@mellanox.com \
--to=tariqt@mellanox.com \
--cc=davem@davemloft.net \
--cc=eranbe@mellanox.com \
--cc=matanb@mellanox.com \
--cc=netdev@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox