Showing error 595

User: Jiri Slaby
Error type: Double Resource Put
Error type description: There is a try to return some resource to the system twice
File location: drivers/misc/sgi-gru/grutlbpurge.c
Line in file: 217
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2011-11-07 22:20:28 UTC


Source:

187        "  FLUSH gruid %d, asid 0x%x, num %ld, cbmap 0x%x\n",
188                                gid, asid, num, asids->mt_ctxbitmap);
189                        tgh = get_lock_tgh_handle(gru);
190                        tgh_invalidate(tgh, start, 0, asid, grupagesize, 0,
191                                       num - 1, asids->mt_ctxbitmap);
192                        get_unlock_tgh_handle(tgh);
193                } else {
194                        STAT(flush_tlb_gru_zero_asid);
195                        asids->mt_asid = 0;
196                        __clear_bit(gru->gs_gid, gms->ms_asidmap);
197                        gru_dbg(grudev,
198        "  CLEARASID gruid %d, asid 0x%x, cbtmap 0x%x, asidmap 0x%lx\n",
199                                gid, asid, asids->mt_ctxbitmap,
200                                gms->ms_asidmap[0]);
201                }
202        }
203        spin_unlock(&gms->ms_asid_lock);
204}
205
206/*
207 * Flush the entire TLB on a chiplet.
208 */
209void gru_flush_all_tlb(struct gru_state *gru)
210{
211        struct gru_tlb_global_handle *tgh;
212
213        gru_dbg(grudev, "gru %p, gid %d\n", gru, gru->gs_gid);
214        tgh = get_lock_tgh_handle(gru);
215        tgh_invalidate(tgh, 0, ~0, 0, 1, 1, GRUMAXINVAL - 1, 0);
216        get_unlock_tgh_handle(tgh);
217        preempt_enable();
218}
219
220/*
221 * MMUOPS notifier callout functions
222 */
223static void gru_invalidate_range_start(struct mmu_notifier *mn,
224                                       struct mm_struct *mm,
225                                       unsigned long start, unsigned long end)
226{
227        struct gru_mm_struct *gms = container_of(mn, struct gru_mm_struct,
Show full sources