Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f0f1184 authored by Subbaraman Narayanamurthy's avatar Subbaraman Narayanamurthy
Browse files

qcom: storm-watch: add support to reset storm count



There are some circumstances where we have to reset the storm
watch interrupt count. Add support for it.

Change-Id: Iacbeb3258d53010aab8ba881d10de773fe54dd93
Signed-off-by: default avatarSubbaraman Narayanamurthy <subbaram@codeaurora.org>
parent 580b03cf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1881,6 +1881,7 @@ static int smb2_request_interrupt(struct smb2 *chip,
	irq_data->parent_data = chip;
	irq_data->name = irq_name;
	irq_data->storm_data = smb2_irqs[irq_index].storm_data;
	mutex_init(&irq_data->storm_data.storm_lock);

	rc = devm_request_threaded_irq(chg->dev, irq, NULL,
					smb2_irqs[irq_index].handler,
+1 −0
Original line number Diff line number Diff line
@@ -1197,6 +1197,7 @@ static int smb138x_request_interrupt(struct smb138x *chip,
	irq_data->parent_data = chip;
	irq_data->name = irq_name;
	irq_data->storm_data = smb138x_irqs[irq_index].storm_data;
	mutex_init(&irq_data->storm_data.storm_lock);

	rc = devm_request_threaded_irq(chg->dev, irq, NULL,
					smb138x_irqs[irq_index].handler,
+10 −1
Original line number Diff line number Diff line
/* Copyright (c) 2016 The Linux Foundation. All rights reserved.
/* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -39,6 +39,7 @@ bool is_storming(struct storm_watch *data)
	if (data->storm_period_ms <= 0)
		return false;

	mutex_lock(&data->storm_lock);
	curr_kt = ktime_get_boottime();
	delta_kt = ktime_sub(curr_kt, data->last_kt);

@@ -53,5 +54,13 @@ bool is_storming(struct storm_watch *data)
	}

	data->last_kt = curr_kt;
	mutex_unlock(&data->storm_lock);
	return is_storming;
}

void reset_storm_count(struct storm_watch *data)
{
	mutex_lock(&data->storm_lock);
	data->storm_count = 0;
	mutex_unlock(&data->storm_lock);
}
+10 −6
Original line number Diff line number Diff line
/* Copyright (c) 2016 The Linux Foundation. All rights reserved.
/* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -13,6 +13,7 @@
#ifndef __STORM_WATCH_H
#define __STORM_WATCH_H
#include <linux/ktime.h>
#include <linux/mutex.h>

/**
 * Data used to track an event storm.
@@ -23,6 +24,7 @@
 * @max_storm_count: The number of chained events required to trigger a storm.
 * @storm_count:     The current number of chained events.
 * @last_kt:         Kernel time of the last event seen.
 * @storm_lock:      Mutex lock to protect storm_watch data.
 */
struct storm_watch {
	bool		enabled;
@@ -30,7 +32,9 @@ struct storm_watch {
	int		max_storm_count;
	int		storm_count;
	ktime_t		last_kt;
	struct mutex	storm_lock;
};

bool is_storming(struct storm_watch *data);
void reset_storm_count(struct storm_watch *data);
#endif