mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-03 21:27:10 +00:00
scatterlist: introduce sg_unmark_end
This is useful in places that recycle the same scatterlist multiple times, and do not want to incur the cost of sg_init_table every time in hot paths. Acked-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
0d2e1a2926
commit
c8164d8931
@ -110,7 +110,7 @@ new_segment:
|
|||||||
if (!sg)
|
if (!sg)
|
||||||
sg = sglist;
|
sg = sglist;
|
||||||
else {
|
else {
|
||||||
sg->page_link &= ~0x02;
|
sg_unmark_end(sg);
|
||||||
sg = sg_next(sg);
|
sg = sg_next(sg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ new_segment:
|
|||||||
* termination bit to avoid doing a full
|
* termination bit to avoid doing a full
|
||||||
* sg_init_table() in drivers for each command.
|
* sg_init_table() in drivers for each command.
|
||||||
*/
|
*/
|
||||||
(*sg)->page_link &= ~0x02;
|
sg_unmark_end(*sg);
|
||||||
*sg = sg_next(*sg);
|
*sg = sg_next(*sg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,6 +171,22 @@ static inline void sg_mark_end(struct scatterlist *sg)
|
|||||||
sg->page_link &= ~0x01;
|
sg->page_link &= ~0x01;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sg_unmark_end - Undo setting the end of the scatterlist
|
||||||
|
* @sg: SG entryScatterlist
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Removes the termination marker from the given entry of the scatterlist.
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
static inline void sg_unmark_end(struct scatterlist *sg)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_DEBUG_SG
|
||||||
|
BUG_ON(sg->sg_magic != SG_MAGIC);
|
||||||
|
#endif
|
||||||
|
sg->page_link &= ~0x02;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sg_phys - Return physical address of an sg entry
|
* sg_phys - Return physical address of an sg entry
|
||||||
* @sg: SG entry
|
* @sg: SG entry
|
||||||
|
Loading…
Reference in New Issue
Block a user