You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux
Merge upstream tree in order to reinstate crct10dif.
This commit is contained in:
@@ -428,7 +428,7 @@ static int hash_digest_key(struct caam_hash_ctx *ctx, const u8 *key_in,
|
||||
dma_addr_t src_dma, dst_dma;
|
||||
int ret = 0;
|
||||
|
||||
desc = kmalloc(CAAM_CMD_SZ * 6 + CAAM_PTR_SZ * 2, GFP_KERNEL | GFP_DMA);
|
||||
desc = kmalloc(CAAM_CMD_SZ * 8 + CAAM_PTR_SZ * 2, GFP_KERNEL | GFP_DMA);
|
||||
if (!desc) {
|
||||
dev_err(jrdev, "unable to allocate key input memory\n");
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -1112,64 +1112,6 @@ static int sg_count(struct scatterlist *sg_list, int nbytes, bool *chained)
|
||||
return sg_nents;
|
||||
}
|
||||
|
||||
/**
|
||||
* sg_copy_end_to_buffer - Copy end data from SG list to a linear buffer
|
||||
* @sgl: The SG list
|
||||
* @nents: Number of SG entries
|
||||
* @buf: Where to copy to
|
||||
* @buflen: The number of bytes to copy
|
||||
* @skip: The number of bytes to skip before copying.
|
||||
* Note: skip + buflen should equal SG total size.
|
||||
*
|
||||
* Returns the number of copied bytes.
|
||||
*
|
||||
**/
|
||||
static size_t sg_copy_end_to_buffer(struct scatterlist *sgl, unsigned int nents,
|
||||
void *buf, size_t buflen, unsigned int skip)
|
||||
{
|
||||
unsigned int offset = 0;
|
||||
unsigned int boffset = 0;
|
||||
struct sg_mapping_iter miter;
|
||||
unsigned long flags;
|
||||
unsigned int sg_flags = SG_MITER_ATOMIC;
|
||||
size_t total_buffer = buflen + skip;
|
||||
|
||||
sg_flags |= SG_MITER_FROM_SG;
|
||||
|
||||
sg_miter_start(&miter, sgl, nents, sg_flags);
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
while (sg_miter_next(&miter) && offset < total_buffer) {
|
||||
unsigned int len;
|
||||
unsigned int ignore;
|
||||
|
||||
if ((offset + miter.length) > skip) {
|
||||
if (offset < skip) {
|
||||
/* Copy part of this segment */
|
||||
ignore = skip - offset;
|
||||
len = miter.length - ignore;
|
||||
if (boffset + len > buflen)
|
||||
len = buflen - boffset;
|
||||
memcpy(buf + boffset, miter.addr + ignore, len);
|
||||
} else {
|
||||
/* Copy all of this segment (up to buflen) */
|
||||
len = miter.length;
|
||||
if (boffset + len > buflen)
|
||||
len = buflen - boffset;
|
||||
memcpy(buf + boffset, miter.addr, len);
|
||||
}
|
||||
boffset += len;
|
||||
}
|
||||
offset += miter.length;
|
||||
}
|
||||
|
||||
sg_miter_stop(&miter);
|
||||
|
||||
local_irq_restore(flags);
|
||||
return boffset;
|
||||
}
|
||||
|
||||
/*
|
||||
* allocate and map the extended descriptor
|
||||
*/
|
||||
@@ -1800,7 +1742,7 @@ static int ahash_process_req(struct ahash_request *areq, unsigned int nbytes)
|
||||
|
||||
if (to_hash_later) {
|
||||
int nents = sg_count(areq->src, nbytes, &chained);
|
||||
sg_copy_end_to_buffer(areq->src, nents,
|
||||
sg_pcopy_to_buffer(areq->src, nents,
|
||||
req_ctx->bufnext,
|
||||
to_hash_later,
|
||||
nbytes - to_hash_later);
|
||||
|
||||
Reference in New Issue
Block a user