All of lore.kernel.org
 help / color / mirror / Atom feed
From: Manoj Kumar <manoj@linux.vnet.ibm.com>
To: linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v5 01/18] cxl: Move common code away from bare-metal-specific files
Date: Tue, 23 Feb 2016 13:08:18 -0600	[thread overview]
Message-ID: <56CCAE22.2070603@linux.vnet.ibm.com> (raw)
In-Reply-To: <1456244519-18934-2-git-send-email-fbarrat@linux.vnet.ibm.com>

Reviewed-by: Manoj Kumar <manoj@linux.vnet.ibm.com>

---
Manoj Kumar

On 2/23/2016 10:21 AM, Frederic Barrat wrote:
> From: Christophe Lombard <clombard@linux.vnet.ibm.com>
>
> Move around some functions which will be accessed from the bare-metal
> and guest environments.
> Code in native.c and pci.c is meant to be bare-metal specific.
> Other files contain code which may be shared with guests.
>
> Co-authored-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
> Signed-off-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
> Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com>
> Acked-by: Ian Munsie <imunsie@au1.ibm.com>
> ---
>   drivers/misc/cxl/cxl.h    |  9 +++++++
>   drivers/misc/cxl/irq.c    | 14 +++++-----
>   drivers/misc/cxl/main.c   | 67 +++++++++++++++++++++++++++++++++++++++++++++++
>   drivers/misc/cxl/native.c | 21 ---------------
>   drivers/misc/cxl/pci.c    | 48 +--------------------------------
>   5 files changed, 84 insertions(+), 75 deletions(-)
>
> diff --git a/drivers/misc/cxl/cxl.h b/drivers/misc/cxl/cxl.h
> index a521bc7..3f88140 100644
> --- a/drivers/misc/cxl/cxl.h
> +++ b/drivers/misc/cxl/cxl.h
> @@ -526,6 +526,7 @@ void cxl_release_irq_ranges(struct cxl_irq_ranges *irqs, struct cxl *adapter);
>   int cxl_setup_irq(struct cxl *adapter, unsigned int hwirq, unsigned int virq);
>   int cxl_update_image_control(struct cxl *adapter);
>   int cxl_reset(struct cxl *adapter);
> +void cxl_release_afu(struct device *dev);
>
>   /* common == phyp + powernv */
>   struct cxl_process_element_common {
> @@ -679,6 +680,9 @@ void cxl_sysfs_afu_remove(struct cxl_afu *afu);
>   int cxl_sysfs_afu_m_add(struct cxl_afu *afu);
>   void cxl_sysfs_afu_m_remove(struct cxl_afu *afu);
>
> +struct cxl *cxl_alloc_adapter(void);
> +struct cxl_afu *cxl_alloc_afu(struct cxl *adapter, int slice);
> +
>   int cxl_afu_activate_mode(struct cxl_afu *afu, int mode);
>   int _cxl_afu_deactivate_mode(struct cxl_afu *afu, int mode);
>   int cxl_afu_deactivate_mode(struct cxl_afu *afu);
> @@ -733,6 +737,11 @@ struct cxl_irq_info {
>   };
>
>   void cxl_assign_psn_space(struct cxl_context *ctx);
> +irqreturn_t cxl_irq(int irq, void *ctx, struct cxl_irq_info *irq_info);
> +int cxl_register_one_irq(struct cxl *adapter, irq_handler_t handler,
> +			void *cookie, irq_hw_number_t *dest_hwirq,
> +			unsigned int *dest_virq, const char *name);
> +
>   int cxl_attach_process(struct cxl_context *ctx, bool kernel, u64 wed,
>   			    u64 amr);
>   int cxl_detach_process(struct cxl_context *ctx);
> diff --git a/drivers/misc/cxl/irq.c b/drivers/misc/cxl/irq.c
> index 09a4060..e468e6c 100644
> --- a/drivers/misc/cxl/irq.c
> +++ b/drivers/misc/cxl/irq.c
> @@ -93,7 +93,7 @@ static irqreturn_t schedule_cxl_fault(struct cxl_context *ctx, u64 dsisr, u64 da
>   	return IRQ_HANDLED;
>   }
>
> -static irqreturn_t cxl_irq(int irq, void *data, struct cxl_irq_info *irq_info)
> +irqreturn_t cxl_irq(int irq, void *data, struct cxl_irq_info *irq_info)
>   {
>   	struct cxl_context *ctx = data;
>   	u64 dsisr, dar;
> @@ -291,12 +291,12 @@ void cxl_unmap_irq(unsigned int virq, void *cookie)
>   	irq_dispose_mapping(virq);
>   }
>
> -static int cxl_register_one_irq(struct cxl *adapter,
> -				irq_handler_t handler,
> -				void *cookie,
> -				irq_hw_number_t *dest_hwirq,
> -				unsigned int *dest_virq,
> -				const char *name)
> +int cxl_register_one_irq(struct cxl *adapter,
> +			irq_handler_t handler,
> +			void *cookie,
> +			irq_hw_number_t *dest_hwirq,
> +			unsigned int *dest_virq,
> +			const char *name)
>   {
>   	int hwirq, virq;
>
> diff --git a/drivers/misc/cxl/main.c b/drivers/misc/cxl/main.c
> index 9fde75e..7ef5b43 100644
> --- a/drivers/misc/cxl/main.c
> +++ b/drivers/misc/cxl/main.c
> @@ -32,6 +32,27 @@ uint cxl_verbose;
>   module_param_named(verbose, cxl_verbose, uint, 0600);
>   MODULE_PARM_DESC(verbose, "Enable verbose dmesg output");
>
> +int cxl_afu_slbia(struct cxl_afu *afu)
> +{
> +	unsigned long timeout = jiffies + (HZ * CXL_TIMEOUT);
> +
> +	pr_devel("cxl_afu_slbia issuing SLBIA command\n");
> +	cxl_p2n_write(afu, CXL_SLBIA_An, CXL_TLB_SLB_IQ_ALL);
> +	while (cxl_p2n_read(afu, CXL_SLBIA_An) & CXL_TLB_SLB_P) {
> +		if (time_after_eq(jiffies, timeout)) {
> +			dev_warn(&afu->dev, "WARNING: CXL AFU SLBIA timed out!\n");
> +			return -EBUSY;
> +		}
> +		/* If the adapter has gone down, we can assume that we
> +		 * will PERST it and that will invalidate everything.
> +		 */
> +		if (!cxl_adapter_link_ok(afu->adapter))
> +			return -EIO;
> +		cpu_relax();
> +	}
> +	return 0;
> +}
> +
>   static inline void _cxl_slbia(struct cxl_context *ctx, struct mm_struct *mm)
>   {
>   	struct task_struct *task;
> @@ -174,6 +195,52 @@ void cxl_remove_adapter_nr(struct cxl *adapter)
>   	idr_remove(&cxl_adapter_idr, adapter->adapter_num);
>   }
>
> +struct cxl *cxl_alloc_adapter(void)
> +{
> +	struct cxl *adapter;
> +
> +	if (!(adapter = kzalloc(sizeof(struct cxl), GFP_KERNEL)))
> +		return NULL;
> +
> +	spin_lock_init(&adapter->afu_list_lock);
> +
> +	if (cxl_alloc_adapter_nr(adapter))
> +		goto err1;
> +
> +	if (dev_set_name(&adapter->dev, "card%i", adapter->adapter_num))
> +		goto err2;
> +
> +	return adapter;
> +
> +err2:
> +	cxl_remove_adapter_nr(adapter);
> +err1:
> +	kfree(adapter);
> +	return NULL;
> +}
> +
> +struct cxl_afu *cxl_alloc_afu(struct cxl *adapter, int slice)
> +{
> +	struct cxl_afu *afu;
> +
> +	if (!(afu = kzalloc(sizeof(struct cxl_afu), GFP_KERNEL)))
> +		return NULL;
> +
> +	afu->adapter = adapter;
> +	afu->dev.parent = &adapter->dev;
> +	afu->dev.release = cxl_release_afu;
> +	afu->slice = slice;
> +	idr_init(&afu->contexts_idr);
> +	mutex_init(&afu->contexts_lock);
> +	spin_lock_init(&afu->afu_cntl_lock);
> +	mutex_init(&afu->spa_mutex);
> +
> +	afu->prefault_mode = CXL_PREFAULT_NONE;
> +	afu->irqs_max = afu->adapter->user_irqs;
> +
> +	return afu;
> +}
> +
>   int cxl_afu_select_best_mode(struct cxl_afu *afu)
>   {
>   	if (afu->modes_supported & CXL_MODE_DIRECTED)
> diff --git a/drivers/misc/cxl/native.c b/drivers/misc/cxl/native.c
> index f409097..0b0a4c8 100644
> --- a/drivers/misc/cxl/native.c
> +++ b/drivers/misc/cxl/native.c
> @@ -265,27 +265,6 @@ int cxl_tlb_slb_invalidate(struct cxl *adapter)
>   	return 0;
>   }
>
> -int cxl_afu_slbia(struct cxl_afu *afu)
> -{
> -	unsigned long timeout = jiffies + (HZ * CXL_TIMEOUT);
> -
> -	pr_devel("cxl_afu_slbia issuing SLBIA command\n");
> -	cxl_p2n_write(afu, CXL_SLBIA_An, CXL_TLB_SLB_IQ_ALL);
> -	while (cxl_p2n_read(afu, CXL_SLBIA_An) & CXL_TLB_SLB_P) {
> -		if (time_after_eq(jiffies, timeout)) {
> -			dev_warn(&afu->dev, "WARNING: CXL AFU SLBIA timed out!\n");
> -			return -EBUSY;
> -		}
> -		/* If the adapter has gone down, we can assume that we
> -		 * will PERST it and that will invalidate everything.
> -		 */
> -		if (!cxl_adapter_link_ok(afu->adapter))
> -			return -EIO;
> -		cpu_relax();
> -	}
> -	return 0;
> -}
> -
>   static int cxl_write_sstp(struct cxl_afu *afu, u64 sstp0, u64 sstp1)
>   {
>   	int rc;
> diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
> index 4c1903f..ad28c56 100644
> --- a/drivers/misc/cxl/pci.c
> +++ b/drivers/misc/cxl/pci.c
> @@ -604,7 +604,7 @@ static void cxl_unmap_slice_regs(struct cxl_afu *afu)
>   	}
>   }
>
> -static void cxl_release_afu(struct device *dev)
> +void cxl_release_afu(struct device *dev)
>   {
>   	struct cxl_afu *afu = to_cxl_afu(dev);
>
> @@ -616,28 +616,6 @@ static void cxl_release_afu(struct device *dev)
>   	kfree(afu);
>   }
>
> -static struct cxl_afu *cxl_alloc_afu(struct cxl *adapter, int slice)
> -{
> -	struct cxl_afu *afu;
> -
> -	if (!(afu = kzalloc(sizeof(struct cxl_afu), GFP_KERNEL)))
> -		return NULL;
> -
> -	afu->adapter = adapter;
> -	afu->dev.parent = &adapter->dev;
> -	afu->dev.release = cxl_release_afu;
> -	afu->slice = slice;
> -	idr_init(&afu->contexts_idr);
> -	mutex_init(&afu->contexts_lock);
> -	spin_lock_init(&afu->afu_cntl_lock);
> -	mutex_init(&afu->spa_mutex);
> -
> -	afu->prefault_mode = CXL_PREFAULT_NONE;
> -	afu->irqs_max = afu->adapter->user_irqs;
> -
> -	return afu;
> -}
> -
>   /* Expects AFU struct to have recently been zeroed out */
>   static int cxl_read_afu_descriptor(struct cxl_afu *afu)
>   {
> @@ -1105,30 +1083,6 @@ static void cxl_release_adapter(struct device *dev)
>   	kfree(adapter);
>   }
>
> -static struct cxl *cxl_alloc_adapter(void)
> -{
> -	struct cxl *adapter;
> -
> -	if (!(adapter = kzalloc(sizeof(struct cxl), GFP_KERNEL)))
> -		return NULL;
> -
> -	spin_lock_init(&adapter->afu_list_lock);
> -
> -	if (cxl_alloc_adapter_nr(adapter))
> -		goto err1;
> -
> -	if (dev_set_name(&adapter->dev, "card%i", adapter->adapter_num))
> -		goto err2;
> -
> -	return adapter;
> -
> -err2:
> -	cxl_remove_adapter_nr(adapter);
> -err1:
> -	kfree(adapter);
> -	return NULL;
> -}
> -
>   #define CXL_PSL_ErrIVTE_tberror (0x1ull << (63-31))
>
>   static int sanitise_adapter_regs(struct cxl *adapter)
>

  reply	other threads:[~2016-02-23 19:08 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-23 16:21 [PATCH v5 00/18] cxl: Add support for powerVM guest​ Frederic Barrat
2016-02-23 16:21 ` [PATCH v5 01/18] cxl: Move common code away from bare-metal-specific files Frederic Barrat
2016-02-23 19:08   ` Manoj Kumar [this message]
2016-02-23 16:21 ` [PATCH v5 02/18] cxl: Move bare-metal specific code to specialized files Frederic Barrat
2016-02-23 19:09   ` Manoj Kumar
2016-02-23 16:21 ` [PATCH v5 03/18] cxl: Define process problem state area at attach time only Frederic Barrat
2016-02-23 19:09   ` Manoj Kumar
2016-03-03  3:55   ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 04/18] cxl: Introduce implementation-specific API Frederic Barrat
2016-02-23 19:09   ` Manoj Kumar
2016-02-23 16:21 ` [PATCH v5 05/18] cxl: Rename some bare-metal specific functions Frederic Barrat
2016-02-23 19:11   ` Manoj Kumar
2016-03-03  4:56   ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 06/18] cxl: Isolate a few bare-metal-specific calls Frederic Barrat
2016-02-23 19:12   ` Manoj Kumar
2016-02-23 16:21 ` [PATCH v5 07/18] cxl: Update cxl_irq() prototype Frederic Barrat
2016-02-23 19:13   ` Manoj Kumar
2016-02-23 16:21 ` [PATCH v5 08/18] cxl: IRQ allocation for guests Frederic Barrat
2016-02-23 19:16   ` Manoj Kumar
2016-03-03  4:59   ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 09/18] cxl: New possible return value from hcall Frederic Barrat
2016-02-23 19:18   ` Manoj Kumar
2016-02-23 19:28   ` Michael Neuling
2016-02-23 16:21 ` [PATCH v5 10/18] cxl: New hcalls to support cxl adapters Frederic Barrat
2016-02-23 19:23   ` Manoj Kumar
2016-03-03  4:04   ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 11/18] cxl: Separate bare-metal fields in adapter and AFU data structures Frederic Barrat
2016-02-24 16:50   ` Manoj Kumar
2016-03-03  4:09   ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 12/18] cxl: Add guest-specific code Frederic Barrat
2016-02-24 18:55   ` Manoj Kumar
2016-03-03  5:02   ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 13/18] cxl: sysfs support for guests Frederic Barrat
2016-02-24 19:03   ` Manoj Kumar
2016-03-03  5:04   ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 14/18] cxl: Support to flash a new image on the adapter from a guest Frederic Barrat
2016-02-24 20:03   ` Manoj Kumar
2016-02-25 13:11     ` Frederic Barrat
2016-02-25 16:59       ` Manoj Kumar
2016-03-03  4:52   ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 15/18] cxl: Parse device tree and create cxl device(s) at boot Frederic Barrat
2016-02-24 20:15   ` Manoj Kumar
2016-02-25 13:19     ` Frederic Barrat
2016-02-25 16:44       ` Manoj Kumar
2016-02-23 16:21 ` [PATCH v5 16/18] cxl: Support the cxl kernel API from a guest Frederic Barrat
2016-02-24 21:09   ` Manoj Kumar
2016-03-03  5:08   ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 17/18] cxl: Adapter failure handling Frederic Barrat
2016-02-24 21:41   ` Manoj Kumar
2016-02-23 16:21 ` [PATCH v5 18/18] cxl: Add tracepoints around the cxl hcall Frederic Barrat
2016-02-24 21:49   ` Manoj Kumar

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=56CCAE22.2070603@linux.vnet.ibm.com \
    --to=manoj@linux.vnet.ibm.com \
    --cc=linuxppc-dev@lists.ozlabs.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.