Showing error 1158

User: Jiri Slaby
Error type: Double Unlock
Error type description: Some lock is unlocked twice unintentionally in a sequence
File location: arch/x86/mm/pageattr.c
Line in file: 724
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-04-30 10:52:00 UTC


Source:

 694        temp_cpa_vaddr = (cpa->pfn << PAGE_SHIFT) + __START_KERNEL_map - phys_base;
 695        alias_cpa.vaddr = &temp_cpa_vaddr;
 696        alias_cpa.flags &= ~CPA_ARRAY;
 697
 698        /*
 699         * The high mapping range is imprecise, so ignore the return value.
 700         */
 701        __change_page_attr_set_clr(&alias_cpa, 0);
 702#endif
 703        return ret;
 704}
 705
 706static int __change_page_attr_set_clr(struct cpa_data *cpa, int checkalias)
 707{
 708        int ret, numpages = cpa->numpages;
 709
 710        while (numpages) {
 711                /*
 712                 * Store the remaining nr of pages for the large page
 713                 * preservation check.
 714                 */
 715                cpa->numpages = numpages;
 716                /* for array changes, we can't use large page */
 717                if (cpa->flags & CPA_ARRAY)
 718                        cpa->numpages = 1;
 719
 720                if (!debug_pagealloc)
 721                        spin_lock(&cpa_lock);
 722                ret = __change_page_attr(cpa, checkalias);
 723                if (!debug_pagealloc)
 724                        spin_unlock(&cpa_lock);
 725                if (ret)
 726                        return ret;
 727
 728                if (checkalias) {
 729                        ret = cpa_process_alias(cpa);
 730                        if (ret)
 731                                return ret;
 732                }
 733
 734                /*
Show full sources