summaryrefslogtreecommitdiff
path: root/die.c
blob: 4e525f9e15539434be76341c237ef06d7f0fe8f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
 * Subject to the GPL, version 2.
 */

#include "xmalloc.h"

struct panic_handler {
	void *arg;
	pid_t pid;
	bool is_enabled;
	void (*on_panic)(void *arg);
	struct panic_handler *next;
};

static struct panic_handler *panic_handlers;

void panic_handler_add(void (*on_panic)(void *arg), void *arg)
{
	struct panic_handler *handler = xmallocz(sizeof(*handler));

	handler->arg		= arg;
	handler->pid		= getpid();
	handler->is_enabled	= true;
	handler->on_panic	= on_panic;
	handler->next		= panic_handlers;
	panic_handlers		= handler;
};

void call_panic_handlers(void)
{
	struct panic_handler *it;
	pid_t pid = getpid();

	for (it = panic_handlers; it; it = it->next) {
		if (it->pid == pid && it->is_enabled) {
			it->is_enabled = false;
			it->on_panic(it->arg);
		}
	}
}
bb73d365'>diff)
net/mlx4_en: Add resilience in low memory systems
This patch fixes the lost of Ethernet port on low memory system, when driver frees its resources and fails to allocate new resources. Issue could happen while changing number of channels, rings size or changing the timestamp configuration. This fix is necessary because of removing vmap use in the code. When vmap was in use driver could allocate non-contiguous memory and make it contiguous with vmap. Now it could fail to allocate a large chunk of contiguous memory and lose the port. Current code tries to allocate new resources and then upon success frees the old resources. Fixes: 73898db04301 ('net/mlx4: Avoid wrong virtual mappings') Signed-off-by: Eugenia Emantayev <eugenia@mellanox.com> Signed-off-by: Tariq Toukan <tariqt@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat