/** * csum_and_copy_from_user - Copy and checksum from user space. * @src: source address (user space) * @dst: destination address * @len: number of bytes to be copied. * * Returns an 32bit unfolded checksum of the buffer. * src and dst are best aligned to 64bits.
*/
__wsum
csum_and_copy_from_user(constvoid __user *src, void *dst, int len)
{
__wsum sum;
might_sleep(); if (!user_access_begin(src, len)) return 0;
sum = csum_partial_copy_generic((__force constvoid *)src, dst, len);
user_access_end(); return sum;
}
/** * csum_and_copy_to_user - Copy and checksum to user space. * @src: source address * @dst: destination address (user space) * @len: number of bytes to be copied. * * Returns an 32bit unfolded checksum of the buffer. * src and dst are best aligned to 64bits.
*/
__wsum
csum_and_copy_to_user(constvoid *src, void __user *dst, int len)
{
__wsum sum;
might_sleep(); if (!user_access_begin(dst, len)) return 0;
sum = csum_partial_copy_generic(src, (void __force *)dst, len);
user_access_end(); return sum;
}
/** * csum_partial_copy_nocheck - Copy and checksum. * @src: source address * @dst: destination address * @len: number of bytes to be copied. * * Returns an 32bit unfolded checksum of the buffer.
*/
__wsum
csum_partial_copy_nocheck(constvoid *src, void *dst, int len)
{ return csum_partial_copy_generic(src, dst, len);
}
EXPORT_SYMBOL(csum_partial_copy_nocheck);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.