Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6776f3d26aec60cb6e0fc770a00993accd09376f
Commit:     6776f3d26aec60cb6e0fc770a00993accd09376f
Parent:     ece97941c378b4a424530585a7c855e466f1bd2c
Author:     Enrico Scholz <[EMAIL PROTECTED]>
AuthorDate: Mon May 21 12:29:40 2007 +0100
Committer:  Russell King <[EMAIL PROTECTED]>
CommitDate: Sat May 26 10:09:39 2007 +0100

    [ARM] 4403/1: Make the PXA-I2C driver work with lockdep validator
    
    Using lockdep validator causes warnings like
    
      INFO: trying to register non-static key.
      the code is fine but needs lockdep annotation.
      turning off the locking correctness validator.
      [<c00241a0>] (dump_stack+0x0/0x14) from [<c00520f8>] 
(__lock_acquire+0x150/0xc40)
      [<c0051fa8>] (__lock_acquire+0x0/0xc40) from [<c00530a0>] 
(lock_acquire+0x5c/0x70)
      [<c0053044>] (lock_acquire+0x0/0x70) from [<c01d9e44>] 
(_spin_lock_irq+0x48/0x58)
       r7:c07e5144 r6:00000000 r5:c015fb94 r4:c07e50b8
      [<c01d9dfc>] (_spin_lock_irq+0x0/0x58) from [<c015fb94>] 
(i2c_pxa_xfer+0x110/0x2e0)
       r5:c07e50b8 r4:0000001f
    
    This is caused by memcpy'ing a statical initialized spin-lock. This patch
    removes a static pxa_i2c structure which was used only as a source for this
    memcpy() operation. Instead of, members and the spinlock will be
    initialized manually.
    
    Signed-off-by: Enrico Scholz <[EMAIL PROTECTED]>
    Signed-off-by: Russell King <[EMAIL PROTECTED]>
---
 drivers/i2c/busses/i2c-pxa.c |   23 +++++++++--------------
 1 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
index 8a0a99b..28e7b91 100644
--- a/drivers/i2c/busses/i2c-pxa.c
+++ b/drivers/i2c/busses/i2c-pxa.c
@@ -837,20 +837,10 @@ static const struct i2c_algorithm i2c_pxa_algorithm = {
        .functionality  = i2c_pxa_functionality,
 };
 
-static struct pxa_i2c i2c_pxa = {
-       .lock   = __SPIN_LOCK_UNLOCKED(i2c_pxa.lock),
-       .adap   = {
-               .owner          = THIS_MODULE,
-               .algo           = &i2c_pxa_algorithm,
-               .name           = "pxa2xx-i2c.0",
-               .retries        = 5,
-       },
-};
-
 #define res_len(r)             ((r)->end - (r)->start + 1)
 static int i2c_pxa_probe(struct platform_device *dev)
 {
-       struct pxa_i2c *i2c = &i2c_pxa;
+       struct pxa_i2c *i2c;
        struct resource *res;
        struct i2c_pxa_platform_data *plat = dev->dev.platform_data;
        int ret;
@@ -864,15 +854,20 @@ static int i2c_pxa_probe(struct platform_device *dev)
        if (!request_mem_region(res->start, res_len(res), res->name))
                return -ENOMEM;
 
-       i2c = kmalloc(sizeof(struct pxa_i2c), GFP_KERNEL);
+       i2c = kzalloc(sizeof(struct pxa_i2c), GFP_KERNEL);
        if (!i2c) {
                ret = -ENOMEM;
                goto emalloc;
        }
 
-       memcpy(i2c, &i2c_pxa, sizeof(struct pxa_i2c));
+       i2c->adap.owner   = THIS_MODULE;
+       i2c->adap.algo    = &i2c_pxa_algorithm;
+       i2c->adap.retries = 5;
+
+       spin_lock_init(&i2c->lock);
        init_waitqueue_head(&i2c->wait);
-       i2c->adap.name[strlen(i2c->adap.name) - 1] = '0' + dev->id % 10;
+
+       sprintf(i2c->adap.name, "pxa_i2c-i2c.%u", dev->id);
 
        i2c->reg_base = ioremap(res->start, res_len(res));
        if (!i2c->reg_base) {
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to