linux.kernel - 26 new messages in 21 topics - digest
linux.kernel
http://groups.google.com/group/linux.kernel?hl=en
linux.kernel@googlegroups.com
Today's topics:
* clk: Allow drivers to pass in a regmap - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/e089bad72bfa5919?hl=en
* mm: slub: fix ALLOC_SLOWPATH stat - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/ba7cff74381f9805?hl=en
* mfd: ssbi: Add regmap read/write helpers - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/24e221cf4752aa9d?hl=en
* iscsi: fix wrong order of opcode and itt in iscsi_handle_reject prompt - 1
messages, 1 author
http://groups.google.com/group/linux.kernel/t/193213cdb31fc760?hl=en
* slub: Fix possible format string bug. - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/d4d53d4307f838d9?hl=en
* mm: prevent set a value less than 0 to min_free_kbytes - 1 messages, 1
author
http://groups.google.com/group/linux.kernel/t/85d7b8610090ed87?hl=en
* include/linux/regmap.h: fix a couple of typos - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/e7f7d3a993942fee?hl=en
* linux-next: manual merge of the ipsec-next tree with the net-next tree - 1
messages, 1 author
http://groups.google.com/group/linux.kernel/t/fb520c0a27c7445a?hl=en
* 9b17c62382: -36.6% regression on sparse file copy - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/cc0d90f622c30bd0?hl=en
* ARM: imx6q: Add missing esai_ahb clock to current clock tree - 3 messages, 2
authors
http://groups.google.com/group/linux.kernel/t/dccb8685e68a3843?hl=en
* iommu/vt-d: fix error in detect ATS capability - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/eb56cf8dba5ff2be?hl=en
* kdump failed because of hotplug memory adding in kdump kernel - 1 messages,
1 author
http://groups.google.com/group/linux.kernel/t/1d614525bf91dfa1?hl=en
* PHY: for 3.14 - 2 messages, 1 author
http://groups.google.com/group/linux.kernel/t/7d6f32cd35400334?hl=en
* linux-next: manual merge of the sound-asoc tree with the tree - 1 messages,
1 author
http://groups.google.com/group/linux.kernel/t/cc46d796069ff877?hl=en
* perf on raspberry-pi without overflow interrupt - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/a41a2323b165e1d8?hl=en
* ACPI: Add ACPI 5.0 Time and Alarm Device driver - 2 messages, 2 authors
http://groups.google.com/group/linux.kernel/t/09f3287b564cd53c?hl=en
* spi: atmel: Refactor spi-atmel to use SPI framework queue - 1 messages, 1
author
http://groups.google.com/group/linux.kernel/t/131a2e349c3217de?hl=en
* linux-next: manual merge of the block tree with the btrfs tree - 1 messages,
1 author
http://groups.google.com/group/linux.kernel/t/b80d3bddcb535610?hl=en
* extcon next for 3.14 - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/8412ffd0cad08dbf?hl=en
* Idle power fix regresses ebizzy performance (was 3.12-stable backport of
NUMA balancing patches) - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/636be63dd88637ff?hl=en
* crypto:s5p-sss: Exynos5 SoCs too can select SSS driver - 2 messages, 1
author
http://groups.google.com/group/linux.kernel/t/f59d361a0fccccf0?hl=en
==============================================================================
TOPIC: clk: Allow drivers to pass in a regmap
http://groups.google.com/group/linux.kernel/t/e089bad72bfa5919?hl=en
==============================================================================
== 1 of 1 ==
Date: Wed, Jan 8 2014 6:20 pm
From: Stephen Boyd
On 01/08/14 17:51, Mike Turquette wrote:
> Quoting Stephen Boyd (2013-12-23 17:12:26)
>> Add support to the clock core so that drivers can pass in a
>> regmap. If no regmap is specified try to query the device that's
>> registering the clock for its regmap. This should allow drivers
>> to use the core regmap helpers. This is based on a similar design
>> in the regulator framework.
>>
>> Cc: Mark Brown <broonie@kernel.org>
>> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
>> ---
>> drivers/clk/clk.c | 8 ++++++++
>> include/linux/clk-provider.h | 7 +++++++
>> 2 files changed, 15 insertions(+)
>>
>> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
>> index 9ad7b71..5e71f5c 100644
>> --- a/drivers/clk/clk.c
>> +++ b/drivers/clk/clk.c
>> @@ -20,6 +20,7 @@
>> #include <linux/device.h>
>> #include <linux/init.h>
>> #include <linux/sched.h>
>> +#include <linux/regmap.h>
>>
>> static DEFINE_SPINLOCK(enable_lock);
>> static DEFINE_MUTEX(prepare_lock);
>> @@ -1834,6 +1835,13 @@ static int _clk_register(struct device *dev, struct clk_hw *hw, struct clk *clk)
>> clk->num_parents = hw->init->num_parents;
>> hw->clk = clk;
>>
>> + if (hw->init->regmap)
>> + hw->regmap = hw->init->regmap;
> Hi Stephen,
>
> The whole series looks good to me except for the placement of the regmap
> details inside struct clk_hw. That structure exists only to hide struct
> clk from the hardware-specific clock structure and I'd not like to set
> the precedent of shoving per-clock data into it.
>
> As an alternative, how about finding a way to put these per-clock regmap
> details into the hardware-specific clock structure? I understand that
> you want to make these ops available to others, which is why they are in
> the public struct clk_hw. I'm just wondering if that is the right way to
> do it...
The regulator framework has gone this way. It seemed like a similar
approach in the clock framework would be the right way to go too.
>
> Patch #3 illustrates the sort of struct-member-creep that worries me.
> What is to stop someone from putting "unsigned int divider_reg" or
> "unsigned int mux_reg", and then the thing just keeps growing.
>
I see two ways forward if you don't want these members in struct clk_hw.
1) Inheritance: struct clk_regmap wrapper struct and
clk_register_regmap() and devm_clk_register_regmap() and then another
wrapper struct around that.
example:
struct clk_regmap {
struct clk_hw hw;
struct regmap *regmap;
unsigned int enable_reg;
unsigned int enable_mask;
bool enable_is_inverted;
};
struct clk_branch {
u32 hwcg_reg;
u32 halt_reg;
u8 hwcg_bit;
u8 halt_bit;
u8 halt_check;
struct clk_regmap clkr;
};
static struct clk_branch gsbi1_uart_clk = {
.halt_reg = 0x2fcc,
.halt_bit = 10,
.clkr = {
.enable_reg = 0x29d4,
.enable_mask = BIT(9),
.hw.init = &(struct clk_init_data){
.name = "gsbi1_uart_clk",
.parent_names = (const char *[]){
"gsbi1_uart_src",
},
.num_parents = 1,
.ops = &clk_branch_ops,
.flags = CLK_SET_RATE_PARENT,
},
},
};
2) Interfaces: Add a void *data in struct clk_hw that can point to
whatever I want and still have the same clk_regmap_register() and
devm_clk_regmap_register()
Example:
struct clk_hw {
struct clk *clk;
const struct clk_init_data *init;
void *data;
};
struct clk_regmap {
struct regmap *regmap;
unsigned int enable_reg;
unsigned int enable_mask;
bool enable_is_inverted;
};
struct clk_branch {
u32 hwcg_reg;
u32 halt_reg;
u8 hwcg_bit;
u8 halt_bit;
u8 halt_check;
struct clk_hw;
};
static struct clk_branch gsbi1_uart_clk = {
.halt_reg = 0x2fcc,
.halt_bit = 10,
.hw = {
.data = &(struct clk_regmap){
.enable_reg = 0x29d4,
.enable_mask = BIT(9),
};
.init = &(struct clk_init_data){
.name = "gsbi1_uart_clk",
.parent_names = (const char *[]){
"gsbi1_uart_src",
},
.num_parents = 1,
.ops = &clk_branch_ops,
.flags = CLK_SET_RATE_PARENT,
},
},
};
I guess option 2 is less likely given your comment about clk_hw being
nothing more than a traversal mechanism.
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
==============================================================================
TOPIC: mm: slub: fix ALLOC_SLOWPATH stat
http://groups.google.com/group/linux.kernel/t/ba7cff74381f9805?hl=en
==============================================================================
== 1 of 1 ==
Date: Wed, Jan 8 2014 6:30 pm
From: David Rientjes
On Mon, 6 Jan 2014, Dave Hansen wrote:
> There used to be only one path out of __slab_alloc(), and
> ALLOC_SLOWPATH got bumped in that exit path. Now there are two,
> and a bunch of gotos. ALLOC_SLOWPATH can now get set more than once
> during a single call to __slab_alloc() which is pretty bogus.
> Here's the sequence:
>
> 1. Enter __slab_alloc(), fall through all the way to the
> stat(s, ALLOC_SLOWPATH);
> 2. hit 'if (!freelist)', and bump DEACTIVATE_BYPASS, jump to
> new_slab (goto #1)
> 3. Hit 'if (c->partial)', bump CPU_PARTIAL_ALLOC, goto redo
> (goto #2)
> 4. Fall through in the same path we did before all the way to
> stat(s, ALLOC_SLOWPATH)
> 5. bump ALLOC_REFILL stat, then return
>
> Doing this is obviously bogus. It keeps us from being able to
> accurately compare ALLOC_SLOWPATH vs. ALLOC_FASTPATH. It also
> means that the total number of allocs always exceeds the total
> number of frees.
>
> This patch moves stat(s, ALLOC_SLOWPATH) to be called from the
> same place that __slab_alloc() is. This makes it much less
> likely that ALLOC_SLOWPATH will get botched again in the
> spaghetti-code inside __slab_alloc().
>
> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Acked-by: David Rientjes <rientjes@google.com>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
==============================================================================
TOPIC: mfd: ssbi: Add regmap read/write helpers
http://groups.google.com/group/linux.kernel/t/24e221cf4752aa9d?hl=en
==============================================================================
== 1 of 1 ==
Date: Wed, Jan 8 2014 6:30 pm
From: Stephen Boyd
On 01/08/14 17:13, Courtney Cavin wrote:
> On Wed, Jan 08, 2014 at 07:37:47PM +0100, Stephen Boyd wrote:
>> --- a/include/linux/ssbi.h
>> +++ b/include/linux/ssbi.h
>> @@ -20,4 +20,17 @@
>> int ssbi_write(struct device *dev, u16 addr, const u8 *buf, int len);
>> int ssbi_read(struct device *dev, u16 addr, u8 *buf, int len);
>>
>> +static inline int
>> +ssbi_reg_read(void *context, unsigned int reg, unsigned int *val)
>> +{
>> + *val = 0;
>> + return ssbi_read(context, reg, (u8 *)val, 1);
>> +}
>> +
>> +static inline int
>> +ssbi_reg_write(void *context, unsigned int reg, unsigned int val)
>> +{
>> + return ssbi_write(context, reg, (u8 *)&val, 1);
>> +}
> These functions are endian specific and just generally ugly. I
> understand that these functions may make the ssbi regmap code cleaner,
> but that's not really a good excuse for functions which by themselves
> look horribly broken.
>
> If these are really needed, perhaps something like the following would
> be acceptable?
>
> +static inline int
> +ssbi_reg_read(void *context, unsigned int reg, unsigned int *val)
> +{
> + int rc;
> + u8 b;
> + rc = ssbi_read(context, reg, &b, 1);
> + if (rc == 1)
> + *val = b;
> + return rc;
> +}
> +
> +static inline int
> +ssbi_reg_write(void *context, unsigned int reg, unsigned int val)
> +{
> + u8 b = val;
> + return ssbi_write(context, reg, &b, 1);
> +}
Sure. I think you meant to check for a 0 return value from ssbi_read
though? Lee can you use this replacement patch please?
---8<---
From: Stephen Boyd <sboyd@codeaurora.org>
Subject: [PATCH] mfd: ssbi: Add regmap read/write helpers
Add read and write helper functions that the pm8921-core driver
can use to read and write ssbi regsiters via a "no-bus" regmap.
Cc: Mark Brown <broonie@kernel.org>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
---
include/linux/ssbi.h | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/include/linux/ssbi.h b/include/linux/ssbi.h
index bcbb642a7641..087b08a4d333 100644
--- a/include/linux/ssbi.h
+++ b/include/linux/ssbi.h
@@ -20,4 +20,24 @@
int ssbi_write(struct device *dev, u16 addr, const u8 *buf, int len);
int ssbi_read(struct device *dev, u16 addr, u8 *buf, int len);
+static inline int
+ssbi_reg_read(void *context, unsigned int reg, unsigned int *val)
+{
+ int ret;
+ u8 v;
+
+ ret = ssbi_read(context, reg, &v, 1);
+ if (!ret)
+ *val = v;
+
+ return ret;
+}
+
+static inline int
+ssbi_reg_write(void *context, unsigned int reg, unsigned int val)
+{
+ u8 v = val;
+ return ssbi_write(context, reg, &v, 1);
+}
+
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home