*参照元 [#g37406da] #backlinks *説明 [#aa59e537] -パス: 複数あり --MMU が無効の場合: [[linux-2.6.33/arch/arm/mm/nommu.c]] --MMU が有効の場合: [[linux-2.6.33/arch/arm/mm/ioremap.c]] -FIXME: これは何? --説明 **引数 [#h690faef] -volatile void __iomem *io_addr -- --[[linux-2.6.33/__iomem]] **返り値 [#m9071ce4] -なし **参考 [#n870ceba] *実装 [#p53fb3e1] **MMU が無効の場合 [#j964010c] void __iounmap(volatile void __iomem *addr) { } EXPORT_SYMBOL(__iounmap); -特にライセンスを区別せずシンボルを公開する。 --[[linux-2.6.33/EXPORT_SYMBOL()]] **MMU が有効の場合 [#i764c520] void __iounmap(volatile void __iomem *io_addr) { void *addr = (void *)(PAGE_MASK & (unsigned long)io_addr); - --[[linux-2.6.33/PAGE_MASK]] #ifndef CONFIG_SMP struct vm_struct **p, *tmp; - --[[linux-2.6.33/vm_struct]] /* * If this is a section based mapping we need to handle it * specially as the VM subsystem does not know how to handle * such a beast. We need the lock here b/c we need to clear * all the mappings before the area can be reclaimed * by someone else. */ write_lock(&vmlist_lock); - --[[linux-2.6.33/write_lock()]] - --[[linux-2.6.33/vmlist_lock(global)]] for (p = &vmlist ; (tmp = *p) ; p = &tmp->next) { if ((tmp->flags & VM_IOREMAP) && (tmp->addr == addr)) { - --[[linux-2.6.33/VM_IOREMAP]] if (tmp->flags & VM_ARM_SECTION_MAPPING) { - --[[linux-2.6.33/VM_ARM_SECTION_MAPPING]] unmap_area_sections((unsigned long)tmp->addr, tmp->size); - --[[linux-2.6.33/unmap_area_sections()]] } break; } } write_unlock(&vmlist_lock); - --[[linux-2.6.33/write_unlock()]] #endif vunmap(addr); - --[[linux-2.6.33/vunmap()]] } EXPORT_SYMBOL(__iounmap); -特にライセンスを区別せずシンボルを公開する。 --[[linux-2.6.33/EXPORT_SYMBOL()]] *コメント [#ld413e61]