Subversion Repositories HelenOS

Rev

Rev 3587 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3587 Rev 3790
Line 104... Line 104...
104
            case AS_PF_FAULT:
104
            case AS_PF_FAULT:
105
                page_table_lock(as, lock);
105
                page_table_lock(as, lock);
106
                *pfrc = rc;
106
                *pfrc = rc;
107
                return NULL;
107
                return NULL;
108
            default:
108
            default:
109
                panic("unexpected rc (%d)\n", rc);
109
                panic("Unexpected rc (%d).", rc);
110
        }  
110
        }  
111
    }
111
    }
112
}
112
}
113
 
113
 
114
 
114
 
Line 121... Line 121...
121
    if (s)
121
    if (s)
122
        symbol = s;
122
        symbol = s;
123
    s = get_symtab_entry(istate->lr);
123
    s = get_symtab_entry(istate->lr);
124
    if (s)
124
    if (s)
125
        sym2 = s;
125
        sym2 = s;
126
    panic("%p: PHT Refill Exception at %p (%s<-%s)\n", badvaddr, istate->pc, symbol, sym2);
126
    panic("%p: PHT Refill Exception at %p (%s<-%s).", badvaddr, istate->pc, symbol, sym2);
127
}
127
}
128
 
128
 
129
 
129
 
130
static void pht_insert(const uintptr_t vaddr, const pfn_t pfn)
130
static void pht_insert(const uintptr_t vaddr, const pfn_t pfn)
131
{
131
{
Line 231... Line 231...
231
                 * or copy_to_uspace().
231
                 * or copy_to_uspace().
232
                 */
232
                 */
233
                page_table_unlock(as, lock);
233
                page_table_unlock(as, lock);
234
                return;
234
                return;
235
            default:
235
            default:
236
                panic("Unexpected pfrc (%d)\n", pfrc);
236
                panic("Unexpected pfrc (%d).", pfrc);
237
        }
237
        }
238
    }
238
    }
239
   
239
   
240
    pte->a = 1; /* Record access to PTE */
240
    pte->a = 1; /* Record access to PTE */
241
    pht_insert(badvaddr, pte->pfn);
241
    pht_insert(badvaddr, pte->pfn);
Line 286... Line 286...
286
 
286
 
287
 
287
 
288
uintptr_t hw_map(uintptr_t physaddr, size_t size)
288
uintptr_t hw_map(uintptr_t physaddr, size_t size)
289
{
289
{
290
    if (last_frame + ALIGN_UP(size, PAGE_SIZE) > KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH))
290
    if (last_frame + ALIGN_UP(size, PAGE_SIZE) > KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH))
291
        panic("Unable to map physical memory %p (%" PRIs " bytes)", physaddr, size)
291
        panic("Unable to map physical memory %p (%" PRIs " bytes).", physaddr, size)
292
   
292
   
293
    uintptr_t virtaddr = PA2KA(last_frame);
293
    uintptr_t virtaddr = PA2KA(last_frame);
294
    pfn_t i;
294
    pfn_t i;
295
    for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++)
295
    for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++)
296
        page_mapping_insert(AS_KERNEL, virtaddr + PFN2ADDR(i), physaddr + PFN2ADDR(i), PAGE_NOT_CACHEABLE | PAGE_WRITE);
296
        page_mapping_insert(AS_KERNEL, virtaddr + PFN2ADDR(i), physaddr + PFN2ADDR(i), PAGE_NOT_CACHEABLE | PAGE_WRITE);