Changeset f8ddd17 in mainline for kernel/arch/sparc64/src/mm/cache.c


Ignore:
Timestamp:
2006-12-09T20:20:50Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b82a13c
Parents:
9ab9c2ec
Message:

Rework support for virtually indexed cache.
Instead of repeatedly flushing the data cache, which was a huge overkill, refuse to create an illegal address alias
in the kernel (again) and allocate appropriate page color in userspace instead. Extend the detection also to
SYS_PHYSMEM_MAP syscall.

Add support for tracking physical memory areas mappable by SYS_PHYSMEM_MAP.

Lots of coding style changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc64/src/mm/cache.c

    r9ab9c2ec rf8ddd17  
    3232/**
    3333 * @file
    34  * @brief       D-cache shootdown algorithm.
    3534 */
    3635
    3736#include <arch/mm/cache.h>
    3837
    39 #ifdef CONFIG_SMP
    40 
    41 #include <smp/ipi.h>
    42 #include <arch/interrupt.h>
    43 #include <synch/spinlock.h>
    44 #include <arch.h>
    45 #include <debug.h>
    46 
    47 /**
    48  * This spinlock is used by the processors to synchronize during the D-cache
    49  * shootdown.
    50  */
    51 SPINLOCK_INITIALIZE(dcachelock);
    52 
    53 /** Initialize the D-cache shootdown sequence.
    54  *
    55  * Start the shootdown sequence by sending out an IPI and wait until all
    56  * processors spin on the dcachelock spinlock.
    57  */
    58 void dcache_shootdown_start(void)
    59 {
    60         int i;
    61 
    62         CPU->arch.dcache_active = 0;
    63         spinlock_lock(&dcachelock);
    64 
    65         ipi_broadcast(IPI_DCACHE_SHOOTDOWN);   
    66 
    67 busy_wait:
    68         for (i = 0; i < config.cpu_count; i++)
    69                 if (cpus[i].arch.dcache_active)
    70                         goto busy_wait;
    71 }
    72 
    73 /** Finish the D-cache shootdown sequence. */
    74 void dcache_shootdown_finalize(void)
    75 {
    76         spinlock_unlock(&dcachelock);
    77         CPU->arch.dcache_active = 1;
    78 }
    79 
    80 /** Process the D-cache shootdown IPI. */
    81 void dcache_shootdown_ipi_recv(void)
    82 {
    83         ASSERT(CPU);
    84 
    85         CPU->arch.dcache_active = 0;
    86         spinlock_lock(&dcachelock);
    87         spinlock_unlock(&dcachelock);
    88        
    89         dcache_flush();
    90 
    91         CPU->arch.dcache_active = 1;
    92 }
    93 
    94 #endif /* CONFIG_SMP */
    95 
    9638/** @}
    9739 */
Note: See TracChangeset for help on using the changeset viewer.