Michael S. Tsirkin wrote:
The getsockopt / setsockopt calls both use char *optval in their interfaces. Internally, they do get_user(), put_user(), copy_to_user(), etc.

It's my understanding, which could be way off, that both getsockopt and setsockopt are also callable from kernel modules. I have not had a chance to try these calls with kernel memory to see what copy_to_user() would do.


I think this works on typical intel, but not so sure about other architectures.
You might need to be in process context so that current pointer is valid.

I did just test this, and it worked at least on my systems. I couldn't find anywhere in the kernel where s/getsockopt would be called without doing a get_user / put_user. Maybe one of the iWarp developers can help here? Is there a separate implementation of s/getsockopt for kernel users, versus userspace users?

How about doing copy_from_user in ucma, and implementing
rdma_set_path/rdma_get_path in cma?

I don't think that we want to start adding a new set of APIs for every option that may eventually need to be supported. I _might_ be able to move the implementation into the ucma, but this would duplicate the s/get_option logic in both in ucma and cma.

Regarding getting path records. For a large subnet, the number of paths can be fairly large, so I'd like to avoid multiple data copies. I also want to avoid needing to allocate a large kernel buffer (which may require a list of allocations) to get the paths to return to userspace.

- Sean

_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to