On 07.02.2012, at 16:23, Anthony Liguori wrote: > On 02/07/2012 07:40 AM, Alexander Graf wrote: >> >> Why? For the HPET timer register for example, we could have a simple MMIO >> hook that says >> >> on_read: >> return read_current_time() - shared_page.offset; >> on_write: >> handle_in_user_space(); >> >> For IDE, it would be as simple as >> >> register_pio_hook_ptr_r(PIO_IDE, SIZE_BYTE,&s->cmd[0]); >> for (i = 1; i< 7; i++) { >> register_pio_hook_ptr_r(PIO_IDE + i, SIZE_BYTE,&s->cmd[i]); >> register_pio_hook_ptr_w(PIO_IDE + i, SIZE_BYTE,&s->cmd[i]); >> } > > You can't easily serialize updates to that address with the kernel since two > threads are likely going to be accessing it at the same time. That either > means an expensive sync operation or a reliance on atomic instructions.
Yes. Essentially we want a mutex for them. > But not all architectures offer non-word sized atomic instructions so it gets > fairly nasty in practice. Well, we can always require fields to be word sized. Alex