Showing error 544

User: Jiri Slaby
Error type: Calling function from invalid context
Error type description: Some function is called at inappropriate place like sleep inside critical sections or interrupt handlers
File location: drivers/mtd/chips/cfi_cmdset_0001.c
Line in file: 1235
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2011-11-07 22:19:02 UTC


Source:

1205                if (!timeo) {
1206                        map_write(map, CMD(0x70), cmd_adr);
1207                        chip->state = FL_STATUS;
1208                        return -ETIME;
1209                }
1210
1211                /* OK Still waiting. Drop the lock, wait a while and retry. */
1212                spin_unlock(chip->mutex);
1213                if (sleep_time >= 1000000/HZ) {
1214                        /*
1215                         * Half of the normal delay still remaining
1216                         * can be performed with a sleeping delay instead
1217                         * of busy waiting.
1218                         */
1219                        msleep(sleep_time/1000);
1220                        timeo -= sleep_time;
1221                        sleep_time = 1000000/HZ;
1222                } else {
1223                        udelay(1);
1224                        cond_resched();
1225                        timeo--;
1226                }
1227                spin_lock(chip->mutex);
1228
1229                while (chip->state != chip_state) {
1230                        /* Someone's suspended the operation: sleep */
1231                        DECLARE_WAITQUEUE(wait, current);
1232                        set_current_state(TASK_UNINTERRUPTIBLE);
1233                        add_wait_queue(&chip->wq, &wait);
1234                        spin_unlock(chip->mutex);
1235                        schedule();
1236                        remove_wait_queue(&chip->wq, &wait);
1237                        spin_lock(chip->mutex);
1238                }
1239                if (chip->erase_suspended || chip->write_suspended)  {
1240                        /* Suspend has occured while sleep: reset timeout */
1241                        timeo = reset_timeo;
1242                        chip->erase_suspended = 0;
1243                        chip->write_suspended = 0;
1244                }
1245        }
Show full sources