Skip to content
Snippets Groups Projects
Select Git revision
  • a383fd43f12dcde80b70cf33157bc7f55d1c4632
  • master default
  • ci-bump-test
  • abp-queue
  • new-delete-leaks
  • fused-continuation-and-completion-stealing
  • emper-fix-invalid-conv
  • remote-put-get-free-context-cycle
  • linux-version-construct-on-first-use
  • libstdc++-asserts
  • msan
  • libc++
  • completer-strategies
  • cactus_stack_devel_one_commit
  • client-load-change
  • cppcheck
  • flow
  • cast-if-future
  • async_network2
  • thread_safe_log_config
  • burak
  • attic/clang-release-tls-optimization-debug-and-fix
  • attic/continuation-stealing-dev
23 results

WorkerSleepExample.cpp

Blame
  • Forked from Lehrstuhl für Informatik 4 (Systemsoftware) / manycore / emper
    Source project has a limited visibility.
    deflate.c 7.71 KiB
    // SPDX-License-Identifier: GPL-2.0-or-later
    /*
     * Cryptographic API.
     *
     * Deflate algorithm (RFC 1951), implemented here primarily for use
     * by IPCOMP (RFC 3173 & RFC 2394).
     *
     * Copyright (c) 2003 James Morris <jmorris@intercode.com.au>
     *
     * FIXME: deflate transforms will require up to a total of about 436k of kernel
     * memory on i386 (390k for compression, the rest for decompression), as the
     * current zlib kernel code uses a worst case pre-allocation system by default.
     * This needs to be fixed so that the amount of memory required is properly
     * related to the  winbits and memlevel parameters.
     *
     * The default winbits of 11 should suit most packets, and it may be something
     * to configure on a per-tfm basis in the future.
     *
     * Currently, compression history is not maintained between tfm calls, as
     * it is not needed for IPCOMP and keeps the code simpler.  It can be
     * implemented if someone wants it.
     */
    #include <linux/init.h>
    #include <linux/module.h>
    #include <linux/crypto.h>
    #include <linux/zlib.h>
    #include <linux/vmalloc.h>
    #include <linux/interrupt.h>
    #include <linux/mm.h>
    #include <linux/net.h>
    #include <crypto/internal/scompress.h>
    
    #define DEFLATE_DEF_LEVEL		Z_DEFAULT_COMPRESSION
    #define DEFLATE_DEF_WINBITS		11
    #define DEFLATE_DEF_MEMLEVEL		MAX_MEM_LEVEL
    
    struct deflate_ctx {
    	struct z_stream_s comp_stream;
    	struct z_stream_s decomp_stream;
    };
    
    static int deflate_comp_init(struct deflate_ctx *ctx, int format)
    {
    	int ret = 0;
    	struct z_stream_s *stream = &ctx->comp_stream;
    
    	stream->workspace = vzalloc(zlib_deflate_workspacesize(
    				    MAX_WBITS, MAX_MEM_LEVEL));
    	if (!stream->workspace) {
    		ret = -ENOMEM;
    		goto out;
    	}
    	if (format)
    		ret = zlib_deflateInit(stream, 3);
    	else
    		ret = zlib_deflateInit2(stream, DEFLATE_DEF_LEVEL, Z_DEFLATED,
    					-DEFLATE_DEF_WINBITS,
    					DEFLATE_DEF_MEMLEVEL,
    					Z_DEFAULT_STRATEGY);
    	if (ret != Z_OK) {
    		ret = -EINVAL;
    		goto out_free;
    	}
    out:
    	return ret;
    out_free:
    	vfree(stream->workspace);
    	goto out;
    }