Merge branch 'akpm' (Andrew's incoming - part two)
Says Andrew: "60 patches. That's good enough for -rc1 I guess. I have quite a lot of detritus to be rechecked, work through maintainers, etc. - most of the remains of MM - rtc - various misc - cgroups - memcg - cpusets - procfs - ipc - rapidio - sysctl - pps - w1 - drivers/misc - aio" * akpm: (60 commits) memcg: replace ss->id_lock with a rwlock aio: allocate kiocbs in batches drivers/misc/vmw_balloon.c: fix typo in code comment drivers/misc/vmw_balloon.c: determine page allocation flag can_sleep outside loop w1: disable irqs in critical section drivers/w1/w1_int.c: multiple masters used same init_name drivers/power/ds2780_battery.c: fix deadlock upon insertion and removal drivers/power/ds2780_battery.c: add a nolock function to w1 interface drivers/power/ds2780_battery.c: create central point for calling w1 interface w1: ds2760 and ds2780, use ida for id and ida_simple_get() to get it pps gpio client: add missing dependency pps: new client driver using GPIO pps: default echo function include/linux/dma-mapping.h: add dma_zalloc_coherent() sysctl: make CONFIG_SYSCTL_SYSCALL default to n sysctl: add support for poll() RapidIO: documentation update drivers/net/rionet.c: fix ethernet address macros for LE platforms RapidIO: fix potential null deref in rio_setup_device() RapidIO: add mport driver for Tsi721 bridge ...
This commit is contained in:
commit
092f4c56c1
70 changed files with 4915 additions and 1041 deletions
|
|
@ -117,6 +117,7 @@ struct kiocb {
|
|||
|
||||
struct list_head ki_list; /* the aio core uses this
|
||||
* for cancellation */
|
||||
struct list_head ki_batch; /* batch allocation */
|
||||
|
||||
/*
|
||||
* If the aio_resfd field of the userspace iocb is not zero,
|
||||
|
|
|
|||
|
|
@ -516,7 +516,7 @@ struct cgroup_subsys {
|
|||
struct list_head sibling;
|
||||
/* used when use_id == true */
|
||||
struct idr idr;
|
||||
spinlock_t id_lock;
|
||||
rwlock_t id_lock;
|
||||
|
||||
/* should be defined only by modular subsystems */
|
||||
struct module *module;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef _LINUX_DMA_MAPPING_H
|
||||
#define _LINUX_DMA_MAPPING_H
|
||||
|
||||
#include <linux/string.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/dma-attrs.h>
|
||||
|
|
@ -117,6 +118,15 @@ static inline int dma_set_seg_boundary(struct device *dev, unsigned long mask)
|
|||
return -EIO;
|
||||
}
|
||||
|
||||
static inline void *dma_zalloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t flag)
|
||||
{
|
||||
void *ret = dma_alloc_coherent(dev, size, dma_handle, flag);
|
||||
if (ret)
|
||||
memset(ret, 0, size);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HAS_DMA
|
||||
static inline int dma_get_cache_alignment(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -30,11 +30,11 @@
|
|||
#define ANON_INODE_FS_MAGIC 0x09041934
|
||||
#define PSTOREFS_MAGIC 0x6165676C
|
||||
|
||||
#define MINIX_SUPER_MAGIC 0x137F /* original minix fs */
|
||||
#define MINIX_SUPER_MAGIC2 0x138F /* minix fs, 30 char names */
|
||||
#define MINIX2_SUPER_MAGIC 0x2468 /* minix V2 fs */
|
||||
#define MINIX2_SUPER_MAGIC2 0x2478 /* minix V2 fs, 30 char names */
|
||||
#define MINIX3_SUPER_MAGIC 0x4d5a /* minix V3 fs */
|
||||
#define MINIX_SUPER_MAGIC 0x137F /* minix v1 fs, 14 char names */
|
||||
#define MINIX_SUPER_MAGIC2 0x138F /* minix v1 fs, 30 char names */
|
||||
#define MINIX2_SUPER_MAGIC 0x2468 /* minix v2 fs, 14 char names */
|
||||
#define MINIX2_SUPER_MAGIC2 0x2478 /* minix v2 fs, 30 char names */
|
||||
#define MINIX3_SUPER_MAGIC 0x4d5a /* minix v3 fs, 60 char names */
|
||||
|
||||
#define MSDOS_SUPER_MAGIC 0x4d44 /* MD */
|
||||
#define NCP_SUPER_MAGIC 0x564c /* Guess, what 0x564c is :-) */
|
||||
|
|
|
|||
|
|
@ -78,8 +78,8 @@ extern void mem_cgroup_uncharge_end(void);
|
|||
extern void mem_cgroup_uncharge_page(struct page *page);
|
||||
extern void mem_cgroup_uncharge_cache_page(struct page *page);
|
||||
|
||||
extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask);
|
||||
int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem);
|
||||
extern void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask);
|
||||
int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *memcg);
|
||||
|
||||
extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
|
||||
extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
|
||||
|
|
@ -88,26 +88,28 @@ extern struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm);
|
|||
static inline
|
||||
int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
|
||||
{
|
||||
struct mem_cgroup *mem;
|
||||
struct mem_cgroup *memcg;
|
||||
rcu_read_lock();
|
||||
mem = mem_cgroup_from_task(rcu_dereference((mm)->owner));
|
||||
memcg = mem_cgroup_from_task(rcu_dereference((mm)->owner));
|
||||
rcu_read_unlock();
|
||||
return cgroup == mem;
|
||||
return cgroup == memcg;
|
||||
}
|
||||
|
||||
extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem);
|
||||
extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg);
|
||||
|
||||
extern int
|
||||
mem_cgroup_prepare_migration(struct page *page,
|
||||
struct page *newpage, struct mem_cgroup **ptr, gfp_t gfp_mask);
|
||||
extern void mem_cgroup_end_migration(struct mem_cgroup *mem,
|
||||
extern void mem_cgroup_end_migration(struct mem_cgroup *memcg,
|
||||
struct page *oldpage, struct page *newpage, bool migration_ok);
|
||||
|
||||
/*
|
||||
* For memory reclaim.
|
||||
*/
|
||||
int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg);
|
||||
int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg);
|
||||
int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg,
|
||||
struct zone *zone);
|
||||
int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg,
|
||||
struct zone *zone);
|
||||
int mem_cgroup_select_victim_node(struct mem_cgroup *memcg);
|
||||
unsigned long mem_cgroup_zone_nr_lru_pages(struct mem_cgroup *memcg,
|
||||
int nid, int zid, unsigned int lrumask);
|
||||
|
|
@ -148,7 +150,7 @@ static inline void mem_cgroup_dec_page_stat(struct page *page,
|
|||
unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
|
||||
gfp_t gfp_mask,
|
||||
unsigned long *total_scanned);
|
||||
u64 mem_cgroup_get_limit(struct mem_cgroup *mem);
|
||||
u64 mem_cgroup_get_limit(struct mem_cgroup *memcg);
|
||||
|
||||
void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx);
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
|
|
@ -244,18 +246,20 @@ static inline struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem)
|
||||
static inline int mm_match_cgroup(struct mm_struct *mm,
|
||||
struct mem_cgroup *memcg)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline int task_in_mem_cgroup(struct task_struct *task,
|
||||
const struct mem_cgroup *mem)
|
||||
const struct mem_cgroup *memcg)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem)
|
||||
static inline struct cgroup_subsys_state
|
||||
*mem_cgroup_css(struct mem_cgroup *memcg)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -267,22 +271,22 @@ mem_cgroup_prepare_migration(struct page *page, struct page *newpage,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline void mem_cgroup_end_migration(struct mem_cgroup *mem,
|
||||
static inline void mem_cgroup_end_migration(struct mem_cgroup *memcg,
|
||||
struct page *oldpage, struct page *newpage, bool migration_ok)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int mem_cgroup_get_reclaim_priority(struct mem_cgroup *mem)
|
||||
static inline int mem_cgroup_get_reclaim_priority(struct mem_cgroup *memcg)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void mem_cgroup_note_reclaim_priority(struct mem_cgroup *mem,
|
||||
static inline void mem_cgroup_note_reclaim_priority(struct mem_cgroup *memcg,
|
||||
int priority)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem,
|
||||
static inline void mem_cgroup_record_reclaim_priority(struct mem_cgroup *memcg,
|
||||
int priority)
|
||||
{
|
||||
}
|
||||
|
|
@ -293,13 +297,13 @@ static inline bool mem_cgroup_disabled(void)
|
|||
}
|
||||
|
||||
static inline int
|
||||
mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg)
|
||||
mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg, struct zone *zone)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline int
|
||||
mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg)
|
||||
mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg, struct zone *zone)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -348,7 +352,7 @@ unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
|
|||
}
|
||||
|
||||
static inline
|
||||
u64 mem_cgroup_get_limit(struct mem_cgroup *mem)
|
||||
u64 mem_cgroup_get_limit(struct mem_cgroup *memcg)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -356,36 +356,50 @@ static inline struct page *compound_head(struct page *page)
|
|||
return page;
|
||||
}
|
||||
|
||||
/*
|
||||
* The atomic page->_mapcount, starts from -1: so that transitions
|
||||
* both from it and to it can be tracked, using atomic_inc_and_test
|
||||
* and atomic_add_negative(-1).
|
||||
*/
|
||||
static inline void reset_page_mapcount(struct page *page)
|
||||
{
|
||||
atomic_set(&(page)->_mapcount, -1);
|
||||
}
|
||||
|
||||
static inline int page_mapcount(struct page *page)
|
||||
{
|
||||
return atomic_read(&(page)->_mapcount) + 1;
|
||||
}
|
||||
|
||||
static inline int page_count(struct page *page)
|
||||
{
|
||||
return atomic_read(&compound_head(page)->_count);
|
||||
}
|
||||
|
||||
static inline void get_page(struct page *page)
|
||||
static inline void get_huge_page_tail(struct page *page)
|
||||
{
|
||||
/*
|
||||
* Getting a normal page or the head of a compound page
|
||||
* requires to already have an elevated page->_count. Only if
|
||||
* we're getting a tail page, the elevated page->_count is
|
||||
* required only in the head page, so for tail pages the
|
||||
* bugcheck only verifies that the page->_count isn't
|
||||
* negative.
|
||||
* __split_huge_page_refcount() cannot run
|
||||
* from under us.
|
||||
*/
|
||||
VM_BUG_ON(atomic_read(&page->_count) < !PageTail(page));
|
||||
atomic_inc(&page->_count);
|
||||
VM_BUG_ON(page_mapcount(page) < 0);
|
||||
VM_BUG_ON(atomic_read(&page->_count) != 0);
|
||||
atomic_inc(&page->_mapcount);
|
||||
}
|
||||
|
||||
extern bool __get_page_tail(struct page *page);
|
||||
|
||||
static inline void get_page(struct page *page)
|
||||
{
|
||||
if (unlikely(PageTail(page)))
|
||||
if (likely(__get_page_tail(page)))
|
||||
return;
|
||||
/*
|
||||
* Getting a tail page will elevate both the head and tail
|
||||
* page->_count(s).
|
||||
* Getting a normal page or the head of a compound page
|
||||
* requires to already have an elevated page->_count.
|
||||
*/
|
||||
if (unlikely(PageTail(page))) {
|
||||
/*
|
||||
* This is safe only because
|
||||
* __split_huge_page_refcount can't run under
|
||||
* get_page().
|
||||
*/
|
||||
VM_BUG_ON(atomic_read(&page->first_page->_count) <= 0);
|
||||
atomic_inc(&page->first_page->_count);
|
||||
}
|
||||
VM_BUG_ON(atomic_read(&page->_count) <= 0);
|
||||
atomic_inc(&page->_count);
|
||||
}
|
||||
|
||||
static inline struct page *virt_to_head_page(const void *x)
|
||||
|
|
@ -803,21 +817,6 @@ static inline pgoff_t page_index(struct page *page)
|
|||
return page->index;
|
||||
}
|
||||
|
||||
/*
|
||||
* The atomic page->_mapcount, like _count, starts from -1:
|
||||
* so that transitions both from it and to it can be tracked,
|
||||
* using atomic_inc_and_test and atomic_add_negative(-1).
|
||||
*/
|
||||
static inline void reset_page_mapcount(struct page *page)
|
||||
{
|
||||
atomic_set(&(page)->_mapcount, -1);
|
||||
}
|
||||
|
||||
static inline int page_mapcount(struct page *page)
|
||||
{
|
||||
return atomic_read(&(page)->_mapcount) + 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return true if this page is mapped into pagetables.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -62,10 +62,23 @@ struct page {
|
|||
struct {
|
||||
|
||||
union {
|
||||
atomic_t _mapcount; /* Count of ptes mapped in mms,
|
||||
* to show when page is mapped
|
||||
* & limit reverse map searches.
|
||||
*/
|
||||
/*
|
||||
* Count of ptes mapped in
|
||||
* mms, to show when page is
|
||||
* mapped & limit reverse map
|
||||
* searches.
|
||||
*
|
||||
* Used also for tail pages
|
||||
* refcounting instead of
|
||||
* _count. Tail pages cannot
|
||||
* be mapped and keeping the
|
||||
* tail page _count zero at
|
||||
* all times guarantees
|
||||
* get_page_unless_zero() will
|
||||
* never succeed on tail
|
||||
* pages.
|
||||
*/
|
||||
atomic_t _mapcount;
|
||||
|
||||
struct {
|
||||
unsigned inuse:16;
|
||||
|
|
|
|||
32
include/linux/pps-gpio.h
Normal file
32
include/linux/pps-gpio.h
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* pps-gpio.h -- PPS client for GPIOs
|
||||
*
|
||||
*
|
||||
* Copyright (C) 2011 James Nuss <jamesnuss@nanometrics.ca>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _PPS_GPIO_H
|
||||
#define _PPS_GPIO_H
|
||||
|
||||
struct pps_gpio_platform_data {
|
||||
bool assert_falling_edge;
|
||||
bool capture_clear;
|
||||
unsigned int gpio_pin;
|
||||
const char *gpio_label;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -39,5 +39,6 @@
|
|||
#define RIO_DID_IDTCPS1616 0x0379
|
||||
#define RIO_DID_IDTVPS1616 0x0377
|
||||
#define RIO_DID_IDTSPS1616 0x0378
|
||||
#define RIO_DID_TSI721 0x80ab
|
||||
|
||||
#endif /* LINUX_RIO_IDS_H */
|
||||
|
|
|
|||
|
|
@ -83,13 +83,6 @@ struct seminfo {
|
|||
|
||||
struct task_struct;
|
||||
|
||||
/* One semaphore structure for each semaphore in the system. */
|
||||
struct sem {
|
||||
int semval; /* current value */
|
||||
int sempid; /* pid of last operation */
|
||||
struct list_head sem_pending; /* pending single-sop operations */
|
||||
};
|
||||
|
||||
/* One sem_array data structure for each set of semaphores in the system. */
|
||||
struct sem_array {
|
||||
struct kern_ipc_perm ____cacheline_aligned_in_smp
|
||||
|
|
@ -103,51 +96,21 @@ struct sem_array {
|
|||
int complex_count; /* pending complex operations */
|
||||
};
|
||||
|
||||
/* One queue for each sleeping process in the system. */
|
||||
struct sem_queue {
|
||||
struct list_head simple_list; /* queue of pending operations */
|
||||
struct list_head list; /* queue of pending operations */
|
||||
struct task_struct *sleeper; /* this process */
|
||||
struct sem_undo *undo; /* undo structure */
|
||||
int pid; /* process id of requesting process */
|
||||
int status; /* completion status of operation */
|
||||
struct sembuf *sops; /* array of pending operations */
|
||||
int nsops; /* number of operations */
|
||||
int alter; /* does the operation alter the array? */
|
||||
};
|
||||
|
||||
/* Each task has a list of undo requests. They are executed automatically
|
||||
* when the process exits.
|
||||
*/
|
||||
struct sem_undo {
|
||||
struct list_head list_proc; /* per-process list: all undos from one process. */
|
||||
/* rcu protected */
|
||||
struct rcu_head rcu; /* rcu struct for sem_undo() */
|
||||
struct sem_undo_list *ulp; /* sem_undo_list for the process */
|
||||
struct list_head list_id; /* per semaphore array list: all undos for one array */
|
||||
int semid; /* semaphore set identifier */
|
||||
short * semadj; /* array of adjustments, one per semaphore */
|
||||
};
|
||||
|
||||
/* sem_undo_list controls shared access to the list of sem_undo structures
|
||||
* that may be shared among all a CLONE_SYSVSEM task group.
|
||||
*/
|
||||
struct sem_undo_list {
|
||||
atomic_t refcnt;
|
||||
spinlock_t lock;
|
||||
struct list_head list_proc;
|
||||
};
|
||||
#ifdef CONFIG_SYSVIPC
|
||||
|
||||
struct sysv_sem {
|
||||
struct sem_undo_list *undo_list;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_SYSVIPC
|
||||
|
||||
extern int copy_semundo(unsigned long clone_flags, struct task_struct *tsk);
|
||||
extern void exit_sem(struct task_struct *tsk);
|
||||
|
||||
#else
|
||||
|
||||
struct sysv_sem {
|
||||
/* empty */
|
||||
};
|
||||
|
||||
static inline int copy_semundo(unsigned long clone_flags, struct task_struct *tsk)
|
||||
{
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -931,6 +931,7 @@ enum
|
|||
#ifdef __KERNEL__
|
||||
#include <linux/list.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/wait.h>
|
||||
|
||||
/* For the /proc/sys support */
|
||||
struct ctl_table;
|
||||
|
|
@ -1011,6 +1012,26 @@ extern int proc_do_large_bitmap(struct ctl_table *, int,
|
|||
* cover common cases.
|
||||
*/
|
||||
|
||||
/* Support for userspace poll() to watch for changes */
|
||||
struct ctl_table_poll {
|
||||
atomic_t event;
|
||||
wait_queue_head_t wait;
|
||||
};
|
||||
|
||||
static inline void *proc_sys_poll_event(struct ctl_table_poll *poll)
|
||||
{
|
||||
return (void *)(unsigned long)atomic_read(&poll->event);
|
||||
}
|
||||
|
||||
void proc_sys_poll_notify(struct ctl_table_poll *poll);
|
||||
|
||||
#define __CTL_TABLE_POLL_INITIALIZER(name) { \
|
||||
.event = ATOMIC_INIT(0), \
|
||||
.wait = __WAIT_QUEUE_HEAD_INITIALIZER(name.wait) }
|
||||
|
||||
#define DEFINE_CTL_TABLE_POLL(name) \
|
||||
struct ctl_table_poll name = __CTL_TABLE_POLL_INITIALIZER(name)
|
||||
|
||||
/* A sysctl table is an array of struct ctl_table: */
|
||||
struct ctl_table
|
||||
{
|
||||
|
|
@ -1021,6 +1042,7 @@ struct ctl_table
|
|||
struct ctl_table *child;
|
||||
struct ctl_table *parent; /* Automatically set */
|
||||
proc_handler *proc_handler; /* Callback for text formatting */
|
||||
struct ctl_table_poll *poll;
|
||||
void *extra1;
|
||||
void *extra2;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -37,6 +37,14 @@ struct new_utsname {
|
|||
#include <linux/nsproxy.h>
|
||||
#include <linux/err.h>
|
||||
|
||||
enum uts_proc {
|
||||
UTS_PROC_OSTYPE,
|
||||
UTS_PROC_OSRELEASE,
|
||||
UTS_PROC_VERSION,
|
||||
UTS_PROC_HOSTNAME,
|
||||
UTS_PROC_DOMAINNAME,
|
||||
};
|
||||
|
||||
struct user_namespace;
|
||||
extern struct user_namespace init_user_ns;
|
||||
|
||||
|
|
@ -80,6 +88,14 @@ static inline struct uts_namespace *copy_utsname(unsigned long flags,
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PROC_SYSCTL
|
||||
extern void uts_proc_notify(enum uts_proc proc);
|
||||
#else
|
||||
static inline void uts_proc_notify(enum uts_proc proc)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline struct new_utsname *utsname(void)
|
||||
{
|
||||
return ¤t->nsproxy->uts_ns->name;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue