rem: attributes, false);
add: protection, false);
context: map_tmap(vm_translation_map *map, addr_t virtualAddress, addr_t physicalAddress, unsigned int attributes){	// lookup the vsid based off the va	uint32 virtualSegmentID = VADDR_TO_ASID(map, virtualAddress);	if (attributes & LOCK_KERNEL)		attributes = 0; // all kernel mappings are R/W to supervisor code	else		attributes = (attributes & LOCK_RW) ? PTE_READ_WRITE : PTE_READ_ONLY;	//dprintf("vm_translation_map.map_tmap: vsid %d, pa 0x%lx, va 0x%lx\n", vsid, pa, va);	// Search for a free page table slot using the primary hash value	uint32 hash = page_table_entry::PrimaryHash(virtualSegmentID, virtualAddress);	page_table_entry_group *group = &sPageTable[hash & sPageTableHashMask];	for (int i = 0; i < 8; i++) {		page_table_entry *entry = &group->entry[i];		if (entry->valid)			continue;		fill_page_table_entry(entry, virtualSegmentID, virtualAddress, physicalAddress, 			attributes, false);		map->map_count++;		return B_OK;	}	// Didn't found one, try the secondary hash value	hash = page_table_entry::SecondaryHash(hash);	group = &sPageTable[hash & sPageTableHashMask];	for (int i = 0; i < 8; i++) {		page_table_entry *entry = &group->entry[i];		if (entry->valid)			continue;		fill_page_table_entry(entry, virtualSegmentID, virtualAddress, physicalAddress, 			attributes, false);		map->map_count++;		return B_OK;	}	panic("vm_translation_map.map_tmap: hash table full\n");	return B_ERROR;}