cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rcu-string.h (997B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Copyright (C) 2012 Red Hat.  All rights reserved.
      4 */
      5
      6#ifndef BTRFS_RCU_STRING_H
      7#define BTRFS_RCU_STRING_H
      8
      9struct rcu_string {
     10	struct rcu_head rcu;
     11	char str[];
     12};
     13
     14static inline struct rcu_string *rcu_string_strdup(const char *src, gfp_t mask)
     15{
     16	size_t len = strlen(src) + 1;
     17	struct rcu_string *ret = kzalloc(sizeof(struct rcu_string) +
     18					 (len * sizeof(char)), mask);
     19	if (!ret)
     20		return ret;
     21	strncpy(ret->str, src, len);
     22	return ret;
     23}
     24
     25static inline void rcu_string_free(struct rcu_string *str)
     26{
     27	if (str)
     28		kfree_rcu(str, rcu);
     29}
     30
     31#define printk_in_rcu(fmt, ...) do {	\
     32	rcu_read_lock();		\
     33	printk(fmt, __VA_ARGS__);	\
     34	rcu_read_unlock();		\
     35} while (0)
     36
     37#define printk_ratelimited_in_rcu(fmt, ...) do {	\
     38	rcu_read_lock();				\
     39	printk_ratelimited(fmt, __VA_ARGS__);		\
     40	rcu_read_unlock();				\
     41} while (0)
     42
     43#define rcu_str_deref(rcu_str) ({				\
     44	struct rcu_string *__str = rcu_dereference(rcu_str);	\
     45	__str->str;						\
     46})
     47
     48#endif