From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Toshi Kani <toshi.kani@hp.com>
Cc: linux-s390@vger.kernel.org, jiang.liu@huawei.com,
wency@cn.fujitsu.com, linux-acpi@vger.kernel.org,
gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, isimatu.yasuaki@jp.fujitsu.com,
yinghai@kernel.org, srivatsa.bhat@linux.vnet.ibm.com,
guohanjun@huawei.com, bhelgaas@google.com,
akpm@linux-foundation.org, linuxppc-dev@lists.ozlabs.org,
lenb@kernel.org
Subject: Re: [RFC PATCH v2 01/12] Add sys_hotplug.h for system device hotplug framework
Date: Fri, 11 Jan 2013 22:23:34 +0100 [thread overview]
Message-ID: <5036592.TuXAnGzk4M@vostro.rjw.lan> (raw)
In-Reply-To: <1357861230-29549-2-git-send-email-toshi.kani@hp.com>
On Thursday, January 10, 2013 04:40:19 PM Toshi Kani wrote:
> Added include/linux/sys_hotplug.h, which defines the system device
> hotplug framework interfaces used by the framework itself and
> handlers.
>
> The order values define the calling sequence of handlers. For add
> execute, the ordering is ACPI->MEM->CPU. Memory is onlined before
> CPU so that threads on new CPUs can start using their local memory.
> The ordering of the delete execute is symmetric to the add execute.
>
> struct shp_request defines a hot-plug request information. The
> device resource information is managed with a list so that a single
> request may target to multiple devices.
>
> Signed-off-by: Toshi Kani <toshi.kani@hp.com>
> ---
> include/linux/sys_hotplug.h | 181 +++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 181 insertions(+)
> create mode 100644 include/linux/sys_hotplug.h
>
> diff --git a/include/linux/sys_hotplug.h b/include/linux/sys_hotplug.h
> new file mode 100644
> index 0000000..86674dd
> --- /dev/null
> +++ b/include/linux/sys_hotplug.h
> @@ -0,0 +1,181 @@
> +/*
> + * sys_hotplug.h - System device hot-plug framework
> + *
> + * Copyright (C) 2012 Hewlett-Packard Development Company, L.P.
> + * Toshi Kani <toshi.kani@hp.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#ifndef _LINUX_SYS_HOTPLUG_H
> +#define _LINUX_SYS_HOTPLUG_H
> +
> +#include <linux/list.h>
> +#include <linux/device.h>
> +
> +/*
> + * System device hot-plug operation proceeds in the following order.
> + * Validate phase -> Execute phase -> Commit phase
> + *
> + * The order values below define the calling sequence of platform
> + * neutral handlers for each phase in ascending order. The order
> + * values of firmware-specific handlers are defined in sys_hotplug.h
> + * under firmware specific directories.
> + */
> +
> +/* All order values must be smaller than this value */
> +#define SHP_ORDER_MAX 0xffffff
> +
> +/* Add Validate order values */
> +
> +/* Add Execute order values */
> +#define SHP_MEM_ADD_EXECUTE_ORDER 100
> +#define SHP_CPU_ADD_EXECUTE_ORDER 110
> +
> +/* Add Commit order values */
> +
> +/* Delete Validate order values */
> +#define SHP_CPU_DEL_VALIDATE_ORDER 100
> +#define SHP_MEM_DEL_VALIDATE_ORDER 110
> +
> +/* Delete Execute order values */
> +#define SHP_CPU_DEL_EXECUTE_ORDER 10
> +#define SHP_MEM_DEL_EXECUTE_ORDER 20
> +
> +/* Delete Commit order values */
> +
> +/*
> + * Hot-plug request types
> + */
> +#define SHP_REQ_ADD 0x000000
> +#define SHP_REQ_DELETE 0x000001
> +#define SHP_REQ_MASK 0x0000ff
> +
> +/*
> + * Hot-plug phase types
> + */
> +#define SHP_PH_VALIDATE 0x000000
> +#define SHP_PH_EXECUTE 0x000100
> +#define SHP_PH_COMMIT 0x000200
> +#define SHP_PH_MASK 0x00ff00
> +
> +/*
> + * Hot-plug operation types
> + */
> +#define SHP_OP_HOTPLUG 0x000000
> +#define SHP_OP_ONLINE 0x010000
> +#define SHP_OP_MASK 0xff0000
> +
> +/*
> + * Hot-plug phases
> + */
> +enum shp_phase {
> + SHP_ADD_VALIDATE = (SHP_REQ_ADD|SHP_PH_VALIDATE),
> + SHP_ADD_EXECUTE = (SHP_REQ_ADD|SHP_PH_EXECUTE),
> + SHP_ADD_COMMIT = (SHP_REQ_ADD|SHP_PH_COMMIT),
> + SHP_DEL_VALIDATE = (SHP_REQ_DELETE|SHP_PH_VALIDATE),
> + SHP_DEL_EXECUTE = (SHP_REQ_DELETE|SHP_PH_EXECUTE),
> + SHP_DEL_COMMIT = (SHP_REQ_DELETE|SHP_PH_COMMIT)
> +};
> +
> +/*
> + * Hot-plug operations
> + */
> +enum shp_operation {
> + SHP_HOTPLUG_ADD = (SHP_OP_HOTPLUG|SHP_REQ_ADD),
> + SHP_HOTPLUG_DEL = (SHP_OP_HOTPLUG|SHP_REQ_DELETE),
> + SHP_ONLINE_ADD = (SHP_OP_ONLINE|SHP_REQ_ADD),
> + SHP_ONLINE_DEL = (SHP_OP_ONLINE|SHP_REQ_DELETE)
> +};
> +
> +/*
> + * Hot-plug device classes
> + */
> +enum shp_class {
> + SHP_CLS_INVALID = 0,
> + SHP_CLS_CPU = 1,
> + SHP_CLS_MEMORY = 2,
> + SHP_CLS_HOSTBRIDGE = 3,
> + SHP_CLS_CONTAINER = 4,
> +};
> +
> +/*
> + * Hot-plug device information
> + */
> +union shp_dev_info {
> + struct shp_cpu {
> + u32 cpu_id;
> + } cpu;
> +
> + struct shp_memory {
> + int node;
> + u64 start_addr;
> + u64 length;
> + } mem;
> +
> + struct shp_hostbridge {
> + } hb;
> +
> + struct shp_node {
> + } node;
> +};
> +
> +struct shp_device {
> + struct list_head list;
> + struct device *device;
> + enum shp_class class;
> + union shp_dev_info info;
> +};
> +
> +/*
> + * Hot-plug request
> + */
> +struct shp_request {
> + /* common info */
> + enum shp_operation operation; /* operation */
> +
> + /* hot-plug event info: only valid for hot-plug operations */
> + void *handle; /* FW handle */
What's the role of handle here?
> + u32 event; /* FW event */
> +
> + /* device resource info */
> + struct list_head dev_list; /* shp_device list */
> +};
> +
> +/*
> + * Inline Utility Functions
> + */
> +static inline bool shp_is_hotplug_op(enum shp_operation operation)
> +{
> + return (operation & SHP_OP_MASK) == SHP_OP_HOTPLUG;
> +}
> +
> +static inline bool shp_is_online_op(enum shp_operation operation)
> +{
> + return (operation & SHP_OP_MASK) == SHP_OP_ONLINE;
> +}
> +
> +static inline bool shp_is_add_op(enum shp_operation operation)
> +{
> + return (operation & SHP_REQ_MASK) == SHP_REQ_ADD;
> +}
> +
> +static inline bool shp_is_add_phase(enum shp_phase phase)
> +{
> + return (phase & SHP_REQ_MASK) == SHP_REQ_ADD;
> +}
> +
> +/*
> + * Externs
> + */
> +typedef int (*shp_func)(struct shp_request *req, int rollback);
> +extern int shp_register_handler(enum shp_phase phase, shp_func func, u32 order);
> +extern int shp_unregister_handler(enum shp_phase phase, shp_func func);
> +extern int shp_submit_req(struct shp_request *req);
> +extern struct shp_request *shp_alloc_request(enum shp_operation operation);
> +extern void shp_add_dev_info(struct shp_request *shp_req,
> + struct shp_device *shp_dev);
> +
> +#endif /* _LINUX_SYS_HOTPLUG_H */
> --
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
next prev parent reply other threads:[~2013-01-11 21:26 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-10 23:40 [RFC PATCH v2 00/12] System device hot-plug framework Toshi Kani
2013-01-10 23:40 ` [RFC PATCH v2 01/12] Add sys_hotplug.h for system device hotplug framework Toshi Kani
2013-01-11 21:23 ` Rafael J. Wysocki [this message]
2013-01-14 15:33 ` Toshi Kani
2013-01-14 18:48 ` Rafael J. Wysocki
2013-01-14 19:02 ` Toshi Kani
2013-01-30 4:48 ` Greg KH
2013-01-31 1:15 ` Toshi Kani
2013-01-31 5:24 ` Greg KH
2013-01-31 14:42 ` Toshi Kani
2013-01-30 4:53 ` Greg KH
2013-01-31 1:46 ` Toshi Kani
2013-01-30 4:58 ` Greg KH
2013-01-31 2:57 ` Toshi Kani
2013-01-31 20:54 ` Rafael J. Wysocki
2013-02-01 1:32 ` Toshi Kani
2013-02-01 7:30 ` Greg KH
2013-02-01 20:40 ` Toshi Kani
2013-02-01 22:21 ` Rafael J. Wysocki
2013-02-01 23:12 ` Toshi Kani
2013-02-02 15:01 ` Greg KH
2013-02-04 0:28 ` Toshi Kani
2013-02-04 12:46 ` Greg KH
2013-02-04 16:46 ` Toshi Kani
2013-02-04 19:45 ` Rafael J. Wysocki
2013-02-04 20:59 ` Toshi Kani
2013-02-04 23:23 ` Rafael J. Wysocki
2013-02-04 23:33 ` Toshi Kani
2013-02-01 7:23 ` Greg KH
2013-02-01 22:12 ` Rafael J. Wysocki
2013-02-02 14:58 ` Greg KH
2013-02-02 20:15 ` Rafael J. Wysocki
2013-02-02 22:18 ` [PATCH?] Move ACPI device nodes under /sys/firmware/acpi (was: Re: [RFC PATCH v2 01/12] Add sys_hotplug.h for system device hotplug framework) Rafael J. Wysocki
2013-02-04 1:24 ` Greg KH
2013-02-04 12:34 ` Rafael J. Wysocki
2013-02-03 20:44 ` [RFC PATCH v2 01/12] Add sys_hotplug.h for system device hotplug framework Rafael J. Wysocki
2013-02-04 12:48 ` Greg KH
2013-02-04 14:21 ` Rafael J. Wysocki
2013-02-04 14:33 ` Greg KH
2013-02-04 20:07 ` Rafael J. Wysocki
2013-02-04 22:13 ` Toshi Kani
2013-02-04 23:52 ` Rafael J. Wysocki
2013-02-05 0:04 ` Greg KH
2013-02-05 1:02 ` Rafael J. Wysocki
2013-02-05 11:11 ` Rafael J. Wysocki
2013-02-05 18:39 ` Greg KH
2013-02-05 21:13 ` Rafael J. Wysocki
2013-02-05 0:55 ` Toshi Kani
2013-02-04 16:19 ` Toshi Kani
2013-02-04 19:43 ` Rafael J. Wysocki
2013-02-04 1:23 ` Greg KH
2013-02-04 13:41 ` Rafael J. Wysocki
2013-02-04 16:02 ` Toshi Kani
2013-02-04 19:48 ` Rafael J. Wysocki
2013-02-04 19:46 ` Toshi Kani
2013-02-04 20:12 ` Rafael J. Wysocki
2013-02-04 20:34 ` Toshi Kani
2013-02-04 23:19 ` Rafael J. Wysocki
2013-01-10 23:40 ` [RFC PATCH v2 02/12] ACPI: " Toshi Kani
2013-01-11 21:25 ` Rafael J. Wysocki
2013-01-14 15:53 ` Toshi Kani
2013-01-14 18:47 ` Rafael J. Wysocki
2013-01-14 18:42 ` Toshi Kani
2013-01-14 19:07 ` Rafael J. Wysocki
2013-01-14 19:21 ` Toshi Kani
2013-01-30 4:51 ` Greg KH
2013-01-31 1:38 ` Toshi Kani
2013-01-14 19:21 ` Greg KH
2013-01-14 19:29 ` Toshi Kani
2013-01-10 23:40 ` [RFC PATCH v2 03/12] drivers/base: Add " Toshi Kani
2013-01-30 4:54 ` Greg KH
2013-01-31 1:48 ` Toshi Kani
2013-01-10 23:40 ` [RFC PATCH v2 04/12] cpu: Add cpu hotplug handlers Toshi Kani
2013-01-10 23:40 ` [RFC PATCH v2 05/12] mm: Add memory " Toshi Kani
2013-01-10 23:40 ` [RFC PATCH v2 06/12] ACPI: Add ACPI bus " Toshi Kani
2013-01-10 23:40 ` [RFC PATCH v2 07/12] ACPI: Add ACPI resource hotplug handler Toshi Kani
2013-01-10 23:40 ` [RFC PATCH v2 08/12] ACPI: Update processor driver for hotplug framework Toshi Kani
2013-01-10 23:40 ` [RFC PATCH v2 09/12] ACPI: Update memory " Toshi Kani
2013-01-10 23:40 ` [RFC PATCH v2 10/12] ACPI: Update container " Toshi Kani
2013-01-10 23:40 ` [RFC PATCH v2 11/12] cpu: Update sysfs cpu/online " Toshi Kani
2013-01-10 23:40 ` [RFC PATCH v2 12/12] ACPI: Update sysfs eject " Toshi Kani
2013-01-17 0:50 ` [RFC PATCH v2 00/12] System device hot-plug framework Rafael J. Wysocki
2013-01-17 17:59 ` Toshi Kani
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5036592.TuXAnGzk4M@vostro.rjw.lan \
--to=rjw@sisk.pl \
--cc=akpm@linux-foundation.org \
--cc=bhelgaas@google.com \
--cc=gregkh@linuxfoundation.org \
--cc=guohanjun@huawei.com \
--cc=isimatu.yasuaki@jp.fujitsu.com \
--cc=jiang.liu@huawei.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-s390@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=srivatsa.bhat@linux.vnet.ibm.com \
--cc=toshi.kani@hp.com \
--cc=wency@cn.fujitsu.com \
--cc=yinghai@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).