xtensa: ISS: allow simdisk to use high memory buffers
authorMax Filippov <jcmvbkbc@gmail.com>
Wed, 21 Sep 2016 00:58:20 +0000 (17:58 -0700)
committerMax Filippov <jcmvbkbc@gmail.com>
Wed, 21 Sep 2016 03:43:22 +0000 (20:43 -0700)
ISS kernel by default has only low memory. But it may be configured to
support high memory and started in a simulator with more than 128M of
RAM. Simdisk driver in such configuration can get IO request with a
high memory page. There may be no TLB entry for that page, only page
table entry. However simulators don't do pagewalking, so such IO request
will fail. Touch IO buffer in the buffer read/write loop so that a TLB
entry is likely there when read or write simcall is invoked.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
arch/xtensa/platforms/iss/simdisk.c

index f58a4e6472cbc5fd9988d8bfb73d3a80e4806bfd..ede04cca30dde3000930831db1ce161e25447a28 100644 (file)
@@ -86,6 +86,7 @@ static void simdisk_transfer(struct simdisk *dev, unsigned long sector,
                unsigned long io;
 
                simc_lseek(dev->fd, offset, SEEK_SET);
+               READ_ONCE(*buffer);
                if (write)
                        io = simc_write(dev->fd, buffer, nbytes);
                else