/* * PCM3168A codec driver header * * Copyright (C) 2015 Imagination Technologies Ltd. * * Author: Damien Horsley * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. */ #ifndef __PCM3168A_H__ #define __PCM3168A_H__ extern const struct dev_pm_ops pcm3168a_pm_ops; extern const struct regmap_config pcm3168a_regmap; extern int pcm3168a_probe(struct device *dev, struct regmap *regmap); extern void pcm3168a_remove(struct device *dev); #define PCM3168A_RST_SMODE 0x40 #define PCM3168A_MRST_MASK 0x80 #define PCM3168A_SRST_MASK 0x40 #define PCM3168A_DAC_SRDA_SHIFT 0 #define PCM3168A_DAC_SRDA_MASK 0x3 #define PCM3168A_DAC_PWR_MST_FMT 0x41 #define PCM3168A_DAC_PSMDA_SHIFT 7 #define PCM3168A_DAC_PSMDA_MASK 0x80 #define PCM3168A_DAC_MSDA_SHIFT 4 #define PCM3168A_DAC_MSDA_MASK 0x70 #define PCM3168A_DAC_FMT_SHIFT 0 #define PCM3168A_DAC_FMT_MASK 0xf #define PCM3168A_DAC_OP_FLT 0x42 #define PCM3168A_DAC_OPEDA_SHIFT 4 #define PCM3168A_DAC_OPEDA_MASK 0xf0 #define PCM3168A_DAC_FLT_SHIFT 0 #define PCM3168A_DAC_FLT_MASK 0xf #define PCM3168A_DAC_INV 0x43 #define PCM3168A_DAC_MUTE 0x44 #define PCM3168A_DAC_ZERO 0x45 #define PCM3168A_DAC_ATT_DEMP_ZF 0x46 #define PCM3168A_DAC_ATMDDA_MASK 0x80 #define PCM3168A_DAC_ATMDDA_SHIFT 7 #define PCM3168A_DAC_ATSPDA_MASK 0x40 #define PCM3168A_DAC_ATSPDA_SHIFT 6 #define PCM3168A_DAC_DEMP_SHIFT 4 #define PCM3168A_DAC_DEMP_MASK 0x30 #define PCM3168A_DAC_AZRO_SHIFT 1 #define PCM3168A_DAC_AZRO_MASK 0xe #define PCM3168A_DAC_ZREV_MASK 0x1 #define PCM3168A_DAC_ZREV_SHIFT 0 #define PCM3168A_DAC_VOL_MASTER 0x47 #define PCM3168A_DAC_VOL_CHAN_START 0x48 #define PCM3168A_ADC_SMODE 0x50 #define PCM3168A_ADC_SRAD_SHIFT 0 #define PCM3168A_ADC_SRAD_MASK 0x3 #define PCM3168A_ADC_MST_FMT 0x51 #define PCM3168A_ADC_MSAD_SHIFT 4 #define PCM3168A_ADC_MSAD_MASK 0x70 #define PCM3168A_ADC_FMTAD_SHIFT 0 #define PCM3168A_ADC_FMTAD_MASK 0x7 #define PCM3168A_ADC_PWR_HPFB 0x52 #define PCM3168A_ADC_PSVAD_SHIFT 4 #define PCM3168A_ADC_PSVAD_MASK 0x70 #define PCM3168A_ADC_BYP_SHIFT 0 #define PCM3168A_ADC_BYP_MASK 0x7 #define PCM3168A_ADC_SEAD 0x53 #define PCM3168A_ADC_INV 0x54 #define PCM3168A_ADC_MUTE 0x55 #define PCM3168A_ADC_OV 0x56 #define PCM3168A_ADC_ATT_OVF 0x57 #define PCM3168A_ADC_ATMDAD_MASK 0x80 #define PCM3168A_ADC_ATMDAD_SHIFT 7 #define PCM3168A_ADC_ATSPAD_MASK 0x40 #define PCM3168A_ADC_ATSPAD_SHIFT 6 #define PCM3168A_ADC_OVFP_MASK 0x1 #define PCM3168A_ADC_OVFP_SHIFT 0 #define PCM3168A_ADC_VOL_MASTER 0x58 #define PCM3168A_ADC_VOL_CHAN_START 0x59 #endif it();'>space:mode:
authorFlorian Westphal <fw@strlen.de>2017-01-18 02:01:22 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2017-01-19 14:28:01 +0100
commite5072053b09642b8ff417d47da05b84720aea3ee (patch)
tree27c6a3089d66f995cd8542a913209492a5d01609
parent524b698db06b9b6da7192e749f637904e2f62d7b (diff)
netfilter: conntrack: refine gc worker heuristics, redux
This further refines the changes made to conntrack gc_worker in commit e0df8cae6c16 ("netfilter: conntrack: refine gc worker heuristics"). The main idea of that change was to reduce the scan interval when evictions take place. However, on the reporters' setup, there are 1-2 million conntrack entries in total and roughly 8k new (and closing) connections per second. In this case we'll always evict at least one entry per gc cycle and scan interval is always at 1 jiffy because of this test: } else if (expired_count) { gc_work->next_gc_run /= 2U; next_run = msecs_to_jiffies(1); being true almost all the time. Given we scan ~10k entries per run its clearly wrong to reduce interval based on nonzero eviction count, it will only waste cpu cycles since a vast majorities of conntracks are not timed out. Thus only look at the ratio (scanned entries vs. evicted entries) to make a decision on whether to reduce or not. Because evictor is supposed to only kick in when system turns idle after a busy period, pick a high ratio -- this makes it 50%. We thus keep the idea of increasing scan rate when its likely that table contains many expired entries. In order to not let timed-out entries hang around for too long (important when using event logging, in which case we want to timely destroy events), we now scan the full table within at most GC_MAX_SCAN_JIFFIES (16 seconds) even in worst-case scenario where all timed-out entries sit in same slot. I tested this with a vm under synflood (with sysctl net.netfilter.nf_conntrack_tcp_timeout_syn_recv=3). While flood is ongoing, interval now stays at its max rate (GC_MAX_SCAN_JIFFIES / GC_MAX_BUCKETS_DIV -> 125ms). With feedback from Nicolas Dichtel. Reported-by: Denys Fedoryshchenko <nuclearcat@nuclearcat.com> Cc: Nicolas Dichtel <nicolas.dichtel@6wind.com> Fixes: b87a2f9199ea82eaadc ("netfilter: conntrack: add gc worker to remove timed-out entries") Signed-off-by: Florian Westphal <fw@strlen.de> Tested-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Acked-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Tested-by: Denys Fedoryshchenko <nuclearcat@nuclearcat.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat