Showing error 1796

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: drivers/infiniband/hw/mthca/mthca_cmd.c
Line in file: 335
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-11 08:47:26 UTC


Source:

 305                          u32 in_modifier,
 306                          u8 op_modifier,
 307                          u16 op,
 308                          unsigned long timeout,
 309                          u8 *status)
 310{
 311        int err = 0;
 312        unsigned long end;
 313
 314        down(&dev->cmd.poll_sem);
 315
 316        err = mthca_cmd_post(dev, in_param,
 317                             out_param ? *out_param : 0,
 318                             in_modifier, op_modifier,
 319                             op, CMD_POLL_TOKEN, 0);
 320        if (err)
 321                goto out;
 322
 323        end = timeout + jiffies;
 324        while (go_bit(dev) && time_before(jiffies, end)) {
 325                set_current_state(TASK_RUNNING);
 326                schedule();
 327        }
 328
 329        if (go_bit(dev)) {
 330                err = -EBUSY;
 331                goto out;
 332        }
 333
 334        if (out_is_imm)
 335                *out_param =
 336                        (u64) be32_to_cpu((__force __be32)
 337                                          __raw_readl(dev->hcr + HCR_OUT_PARAM_OFFSET)) << 32 |
 338                        (u64) be32_to_cpu((__force __be32)
 339                                          __raw_readl(dev->hcr + HCR_OUT_PARAM_OFFSET + 4));
 340
 341        *status = be32_to_cpu((__force __be32) __raw_readl(dev->hcr + HCR_STATUS_OFFSET)) >> 24;
 342
 343out:
 344        up(&dev->cmd.poll_sem);
 345        return err;
Show full sources