GL/CUDA Interop, keeping a buffer with constant contents mapped while used by both

If I create an OpenGL buffer that is then registered with CUDA, and I then map and obtain a memory address pointer to it for CUDA. If I can guarantee that the buffers contents are constant after a setup phase, is it valid to keep the buffer mapped to CUDA for use and allow simultaneous access to it from OpenGL without un-mapping it from CUDA?

From what I can find documentation wise it seems to be undefined behaviour. But it is quite a valid thing to at least want to do. So if it is currently not a safe thing could it be something that is changed to be permitted in future?

Although does using the cudaGraphicsMapFlagsReadOnly flag effectively do this already by NO-OP’ing the map calls in this case?

I have also come across cases for non-constant shared GL/interop buffers where it would be nice to be able to keep mapped pointers in device memory where they can be indirectly loaded by CUDA kernels without having to be passed from the host side continually. Currently I believe in such a situation the only correct method apart from reuploading lists of mapped pointers is to have twice the number of buffers (one for GL interop, one CUDA only), map from GL to CUDA for interop, cudamemcpy the whole of the buffers to the CUDA only buffers, unmap the interop, then run the CUDA kernels that can look up the pre-stored device pointers to the CUDA only buffers. Is there a method using the GL bindless buffers to keep a persistent address?

Also it seem’s odd there is support for in one call mapping multiple resources to CUDA but not one for getting the mapped pointer for multiple resources in one go? Or indeed mapping to CUDA and at the same time getting the mapped pointers for multiple resources in one go.