| Hi Alan,
> A customer of ours claims that he can use KAV$OUT_MAP to map S0 space
> to the VMEbus address space. However, if he attempts to map to the same
> VMEbus address space from another job, he gets the status return indicating
> there is no physical memory. Now for VAXELN, that usually is returned
> to indicate that one is trying to double map a given virtual address.
> However, is something being done by the KAV30 kernel to determine
> that more than one process is trying to map to the same VMEbus address
> space?
The KAV30 kernel doesn't care if another process is mapped to the same
VMEbus address space.
What is the exact error status that the customer is seeing?
> He would also like to know why KAV$OUT_MAP chooses to use S0 addresses
> rather than P0. Unfortunately, RDEBUG doesn't permit one to deposit
> to an 80xxxxxx address.
Typically an application uses KAV$OUT_MAP to map device registers
on a VMEbus controller, these device registers nay need to be accessible
from the device's interrupt service routine running on the KAV30. The
only virtual address space that can safely be accessed from a KAV30 isr is
S0.
Graham
|
| Hi Graham,
Thanks for the info. I did find the problem in his code. What I didn't
realize was that he was attempting to map 8 Mbyte!!!! Of course that meant
he needed to boost system region size for each KAV$OUT_MAP by 16,512 pages.
The first one worked, but the second didn't and returns:
%KERNEL-F-NO_MEMORY, no physical memory available
This was easily confirmed.
This may be a bit misleading since it is S0 space and physical memory may
still be available (but then again the S0 is physically contiguous.)
I offered him a much more efficient means of mapping this in only ONE
job and then passing to other jobs the S0 address returned. This works
just fine for him.
Thanks again,
Alan
|