All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fengguang Wu <fengguang.wu@intel.com>
To: linux-s390@vger.kernel.org
Subject: drivers/base/regmap/regmap-irq.c:44:9: error: implicit declaration of function 'irq_data_get_irq_chi
Date: Fri, 29 Mar 2013 02:34:26 +0000	[thread overview]
Message-ID: <20130329023426.GB9840@localhost> (raw)


Greetings,

These errors make me wonder if regmap is ever useable in s390..

tree:   git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux master
head:   9064171268d838b8f283fe111ef086b9479d059a
commit: f8beab2bb611d735767871e0e1a12dc6a0def7b1 regmap: Add a reusable irq_chip for regmap based interrupt controllers
date:   1 year, 5 months ago
config: make ARCH=s390 allmodconfig

All error/warnings:

   drivers/base/regmap/regmap-irq.c:42:36: warning: 'struct irq_data' declared inside parameter list [enabled by default]
   drivers/base/regmap/regmap-irq.c:42:36: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
   drivers/base/regmap/regmap-irq.c: In function 'regmap_irq_lock':
>> drivers/base/regmap/regmap-irq.c:44:9: error: implicit declaration of function 'irq_data_get_irq_chip_data' [-Werror=implicit-function-declaration]
   drivers/base/regmap/regmap-irq.c:44:35: warning: initialization makes pointer from integer without a cast [enabled by default]
   drivers/base/regmap/regmap-irq.c: At top level:
   drivers/base/regmap/regmap-irq.c:49:43: warning: 'struct irq_data' declared inside parameter list [enabled by default]
   drivers/base/regmap/regmap-irq.c: In function 'regmap_irq_sync_unlock':
   drivers/base/regmap/regmap-irq.c:51:35: warning: initialization makes pointer from integer without a cast [enabled by default]
   drivers/base/regmap/regmap-irq.c: At top level:
   drivers/base/regmap/regmap-irq.c:70:38: warning: 'struct irq_data' declared inside parameter list [enabled by default]
   drivers/base/regmap/regmap-irq.c: In function 'regmap_irq_enable':
   drivers/base/regmap/regmap-irq.c:72:35: warning: initialization makes pointer from integer without a cast [enabled by default]
   drivers/base/regmap/regmap-irq.c:73:63: error: dereferencing pointer to incomplete type
   drivers/base/regmap/regmap-irq.c: At top level:
   drivers/base/regmap/regmap-irq.c:78:39: warning: 'struct irq_data' declared inside parameter list [enabled by default]
   drivers/base/regmap/regmap-irq.c: In function 'regmap_irq_disable':
   drivers/base/regmap/regmap-irq.c:80:35: warning: initialization makes pointer from integer without a cast [enabled by default]
   drivers/base/regmap/regmap-irq.c:81:63: error: dereferencing pointer to incomplete type
   drivers/base/regmap/regmap-irq.c: At top level:
   drivers/base/regmap/regmap-irq.c:86:15: error: variable 'regmap_irq_chip' has initializer but incomplete type
   drivers/base/regmap/regmap-irq.c:87:2: error: unknown field 'name' specified in initializer
   drivers/base/regmap/regmap-irq.c:87:2: warning: excess elements in struct initializer [enabled by default]
   drivers/base/regmap/regmap-irq.c:87:2: warning: (near initialization for 'regmap_irq_chip') [enabled by default]
   drivers/base/regmap/regmap-irq.c:88:2: error: unknown field 'irq_bus_lock' specified in initializer
   drivers/base/regmap/regmap-irq.c:88:2: warning: excess elements in struct initializer [enabled by default]
   drivers/base/regmap/regmap-irq.c:88:2: warning: (near initialization for 'regmap_irq_chip') [enabled by default]
   drivers/base/regmap/regmap-irq.c:89:2: error: unknown field 'irq_bus_sync_unlock' specified in initializer
   drivers/base/regmap/regmap-irq.c:89:2: warning: excess elements in struct initializer [enabled by default]
   drivers/base/regmap/regmap-irq.c:89:2: warning: (near initialization for 'regmap_irq_chip') [enabled by default]
   drivers/base/regmap/regmap-irq.c:90:2: error: unknown field 'irq_disable' specified in initializer
   drivers/base/regmap/regmap-irq.c:90:2: warning: excess elements in struct initializer [enabled by default]
   drivers/base/regmap/regmap-irq.c:90:2: warning: (near initialization for 'regmap_irq_chip') [enabled by default]
   drivers/base/regmap/regmap-irq.c:91:2: error: unknown field 'irq_enable' specified in initializer
   drivers/base/regmap/regmap-irq.c:91:2: warning: excess elements in struct initializer [enabled by default]
   drivers/base/regmap/regmap-irq.c:91:2: warning: (near initialization for 'regmap_irq_chip') [enabled by default]
   drivers/base/regmap/regmap-irq.c: In function 'regmap_irq_thread':
>> drivers/base/regmap/regmap-irq.c:148:4: error: implicit declaration of function 'handle_nested_irq' [-Werror=implicit-function-declaration]
   drivers/base/regmap/regmap-irq.c: In function 'regmap_add_irq_chip':
>> drivers/base/regmap/regmap-irq.c:178:2: error: implicit declaration of function 'irq_alloc_descs' [-Werror=implicit-function-declaration]
>> drivers/base/regmap/regmap-irq.c:233:3: error: implicit declaration of function 'irq_set_chip_data' [-Werror=implicit-function-declaration]
   drivers/base/regmap/regmap-irq.c:234:3: error: implicit declaration of function 'irq_set_chip_and_handler' [-Werror=implicit-function-declaration]
   drivers/base/regmap/regmap-irq.c:235:7: error: 'handle_edge_irq' undeclared (first use in this function)
   drivers/base/regmap/regmap-irq.c:235:7: note: each undeclared identifier is reported only once for each function it appears in
>> drivers/base/regmap/regmap-irq.c:236:3: error: implicit declaration of function 'irq_set_nested_thread' [-Werror=implicit-function-declaration]
>> drivers/base/regmap/regmap-irq.c:243:3: error: implicit declaration of function 'irq_set_noprobe' [-Werror=implicit-function-declaration]
   cc1: some warnings being treated as errors

vim +/irq_data_get_irq_chip_data +44 drivers/base/regmap/regmap-irq.c

f8beab2b Mark Brown 2011-10-28   38  {
f8beab2b Mark Brown 2011-10-28   39  	return &data->chip->irqs[irq - data->irq_base];
f8beab2b Mark Brown 2011-10-28   40  }
f8beab2b Mark Brown 2011-10-28   41  
f8beab2b Mark Brown 2011-10-28   42  static void regmap_irq_lock(struct irq_data *data)
f8beab2b Mark Brown 2011-10-28   43  {
f8beab2b Mark Brown 2011-10-28  @44  	struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
f8beab2b Mark Brown 2011-10-28   45  
f8beab2b Mark Brown 2011-10-28   46  	mutex_lock(&d->lock);
f8beab2b Mark Brown 2011-10-28   47  }
f8beab2b Mark Brown 2011-10-28   48  
f8beab2b Mark Brown 2011-10-28   49  static void regmap_irq_sync_unlock(struct irq_data *data)
f8beab2b Mark Brown 2011-10-28   50  {
f8beab2b Mark Brown 2011-10-28   51  	struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
f8beab2b Mark Brown 2011-10-28   52  	int i, ret;
f8beab2b Mark Brown 2011-10-28   53  
f8beab2b Mark Brown 2011-10-28   54  	/*
f8beab2b Mark Brown 2011-10-28   55  	 * If there's been a change in the mask write it back to the
f8beab2b Mark Brown 2011-10-28   56  	 * hardware.  We rely on the use of the regmap core cache to
f8beab2b Mark Brown 2011-10-28   57  	 * suppress pointless writes.
f8beab2b Mark Brown 2011-10-28   58  	 */
f8beab2b Mark Brown 2011-10-28   59  	for (i = 0; i < d->chip->num_regs; i++) {
f8beab2b Mark Brown 2011-10-28   60  		ret = regmap_update_bits(d->map, d->chip->mask_base + i,
f8beab2b Mark Brown 2011-10-28   61  					 d->mask_buf_def[i], d->mask_buf[i]);
f8beab2b Mark Brown 2011-10-28   62  		if (ret != 0)
f8beab2b Mark Brown 2011-10-28   63  			dev_err(d->map->dev, "Failed to sync masks in %x\n",
f8beab2b Mark Brown 2011-10-28   64  				d->chip->mask_base + i);
f8beab2b Mark Brown 2011-10-28   65  	}
f8beab2b Mark Brown 2011-10-28   66  
f8beab2b Mark Brown 2011-10-28   67  	mutex_unlock(&d->lock);
f8beab2b Mark Brown 2011-10-28   68  }
f8beab2b Mark Brown 2011-10-28   69  
f8beab2b Mark Brown 2011-10-28   70  static void regmap_irq_enable(struct irq_data *data)
f8beab2b Mark Brown 2011-10-28   71  {
f8beab2b Mark Brown 2011-10-28   72  	struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
f8beab2b Mark Brown 2011-10-28   73  	const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->irq);
f8beab2b Mark Brown 2011-10-28   74  
f8beab2b Mark Brown 2011-10-28   75  	d->mask_buf[irq_data->reg_offset] &= ~irq_data->mask;
f8beab2b Mark Brown 2011-10-28   76  }
f8beab2b Mark Brown 2011-10-28   77  
f8beab2b Mark Brown 2011-10-28   78  static void regmap_irq_disable(struct irq_data *data)
f8beab2b Mark Brown 2011-10-28   79  {
f8beab2b Mark Brown 2011-10-28   80  	struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
f8beab2b Mark Brown 2011-10-28   81  	const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->irq);
f8beab2b Mark Brown 2011-10-28   82  
f8beab2b Mark Brown 2011-10-28   83  	d->mask_buf[irq_data->reg_offset] |= irq_data->mask;
f8beab2b Mark Brown 2011-10-28   84  }
f8beab2b Mark Brown 2011-10-28   85  
f8beab2b Mark Brown 2011-10-28   86  static struct irq_chip regmap_irq_chip = {
f8beab2b Mark Brown 2011-10-28   87  	.name			= "regmap",
f8beab2b Mark Brown 2011-10-28   88  	.irq_bus_lock		= regmap_irq_lock,
f8beab2b Mark Brown 2011-10-28   89  	.irq_bus_sync_unlock	= regmap_irq_sync_unlock,
f8beab2b Mark Brown 2011-10-28   90  	.irq_disable		= regmap_irq_disable,
f8beab2b Mark Brown 2011-10-28   91  	.irq_enable		= regmap_irq_enable,
f8beab2b Mark Brown 2011-10-28   92  };
f8beab2b Mark Brown 2011-10-28   93  
f8beab2b Mark Brown 2011-10-28   94  static irqreturn_t regmap_irq_thread(int irq, void *d)
f8beab2b Mark Brown 2011-10-28   95  {
f8beab2b Mark Brown 2011-10-28   96  	struct regmap_irq_chip_data *data = d;
f8beab2b Mark Brown 2011-10-28   97  	struct regmap_irq_chip *chip = data->chip;
f8beab2b Mark Brown 2011-10-28   98  	struct regmap *map = data->map;
f8beab2b Mark Brown 2011-10-28   99  	int ret, i;
f8beab2b Mark Brown 2011-10-28  100  	u8 *buf8 = data->status_reg_buf;
f8beab2b Mark Brown 2011-10-28  101  	u16 *buf16 = data->status_reg_buf;
f8beab2b Mark Brown 2011-10-28  102  	u32 *buf32 = data->status_reg_buf;
f8beab2b Mark Brown 2011-10-28  103  
f8beab2b Mark Brown 2011-10-28  104  	ret = regmap_bulk_read(map, chip->status_base, data->status_reg_buf,
f8beab2b Mark Brown 2011-10-28  105  			       chip->num_regs);
f8beab2b Mark Brown 2011-10-28  106  	if (ret != 0) {
f8beab2b Mark Brown 2011-10-28  107  		dev_err(map->dev, "Failed to read IRQ status: %d\n", ret);
f8beab2b Mark Brown 2011-10-28  108  		return IRQ_NONE;
f8beab2b Mark Brown 2011-10-28  109  	}
f8beab2b Mark Brown 2011-10-28  110  
f8beab2b Mark Brown 2011-10-28  111  	/*
f8beab2b Mark Brown 2011-10-28  112  	 * Ignore masked IRQs and ack if we need to; we ack early so
f8beab2b Mark Brown 2011-10-28  113  	 * there is no race between handling and acknowleding the
f8beab2b Mark Brown 2011-10-28  114  	 * interrupt.  We assume that typically few of the interrupts
f8beab2b Mark Brown 2011-10-28  115  	 * will fire simultaneously so don't worry about overhead from
f8beab2b Mark Brown 2011-10-28  116  	 * doing a write per register.
f8beab2b Mark Brown 2011-10-28  117  	 */
f8beab2b Mark Brown 2011-10-28  118  	for (i = 0; i < data->chip->num_regs; i++) {
f8beab2b Mark Brown 2011-10-28  119  		switch (map->format.val_bytes) {
f8beab2b Mark Brown 2011-10-28  120  		case 1:
f8beab2b Mark Brown 2011-10-28  121  			data->status_buf[i] = buf8[i];
f8beab2b Mark Brown 2011-10-28  122  			break;
f8beab2b Mark Brown 2011-10-28  123  		case 2:
f8beab2b Mark Brown 2011-10-28  124  			data->status_buf[i] = buf16[i];
f8beab2b Mark Brown 2011-10-28  125  			break;
f8beab2b Mark Brown 2011-10-28  126  		case 4:
f8beab2b Mark Brown 2011-10-28  127  			data->status_buf[i] = buf32[i];
f8beab2b Mark Brown 2011-10-28  128  			break;
f8beab2b Mark Brown 2011-10-28  129  		default:
f8beab2b Mark Brown 2011-10-28  130  			BUG();
f8beab2b Mark Brown 2011-10-28  131  			return IRQ_NONE;
f8beab2b Mark Brown 2011-10-28  132  		}
f8beab2b Mark Brown 2011-10-28  133  
f8beab2b Mark Brown 2011-10-28  134  		data->status_buf[i] &= ~data->mask_buf[i];
f8beab2b Mark Brown 2011-10-28  135  
f8beab2b Mark Brown 2011-10-28  136  		if (data->status_buf[i] && chip->ack_base) {
f8beab2b Mark Brown 2011-10-28  137  			ret = regmap_write(map, chip->ack_base + i,
f8beab2b Mark Brown 2011-10-28  138  					   data->status_buf[i]);
f8beab2b Mark Brown 2011-10-28  139  			if (ret != 0)
f8beab2b Mark Brown 2011-10-28  140  				dev_err(map->dev, "Failed to ack 0x%x: %d\n",
f8beab2b Mark Brown 2011-10-28  141  					chip->ack_base + i, ret);
f8beab2b Mark Brown 2011-10-28  142  		}
f8beab2b Mark Brown 2011-10-28  143  	}
f8beab2b Mark Brown 2011-10-28  144  
f8beab2b Mark Brown 2011-10-28  145  	for (i = 0; i < chip->num_irqs; i++) {
f8beab2b Mark Brown 2011-10-28  146  		if (data->status_buf[chip->irqs[i].reg_offset] &
f8beab2b Mark Brown 2011-10-28  147  		    chip->irqs[i].mask) {
f8beab2b Mark Brown 2011-10-28 @148  			handle_nested_irq(data->irq_base + i);
f8beab2b Mark Brown 2011-10-28  149  		}
f8beab2b Mark Brown 2011-10-28  150  	}
f8beab2b Mark Brown 2011-10-28  151  
f8beab2b Mark Brown 2011-10-28  152  	return IRQ_HANDLED;
f8beab2b Mark Brown 2011-10-28  153  }
f8beab2b Mark Brown 2011-10-28  154  
f8beab2b Mark Brown 2011-10-28  155  /**
f8beab2b Mark Brown 2011-10-28  156   * regmap_add_irq_chip(): Use standard regmap IRQ controller handling
f8beab2b Mark Brown 2011-10-28  157   *
f8beab2b Mark Brown 2011-10-28  158   * map:       The regmap for the device.
f8beab2b Mark Brown 2011-10-28  159   * irq:       The IRQ the device uses to signal interrupts
f8beab2b Mark Brown 2011-10-28  160   * irq_flags: The IRQF_ flags to use for the primary interrupt.
f8beab2b Mark Brown 2011-10-28  161   * chip:      Configuration for the interrupt controller.
f8beab2b Mark Brown 2011-10-28  162   * data:      Runtime data structure for the controller, allocated on success
f8beab2b Mark Brown 2011-10-28  163   *
f8beab2b Mark Brown 2011-10-28  164   * Returns 0 on success or an errno on failure.
f8beab2b Mark Brown 2011-10-28  165   *
f8beab2b Mark Brown 2011-10-28  166   * In order for this to be efficient the chip really should use a
f8beab2b Mark Brown 2011-10-28  167   * register cache.  The chip driver is responsible for restoring the
f8beab2b Mark Brown 2011-10-28  168   * register values used by the IRQ controller over suspend and resume.
f8beab2b Mark Brown 2011-10-28  169   */
f8beab2b Mark Brown 2011-10-28  170  int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
f8beab2b Mark Brown 2011-10-28  171  			int irq_base, struct regmap_irq_chip *chip,
f8beab2b Mark Brown 2011-10-28  172  			struct regmap_irq_chip_data **data)
f8beab2b Mark Brown 2011-10-28  173  {
f8beab2b Mark Brown 2011-10-28  174  	struct regmap_irq_chip_data *d;
f8beab2b Mark Brown 2011-10-28  175  	int cur_irq, i;
f8beab2b Mark Brown 2011-10-28  176  	int ret = -ENOMEM;
f8beab2b Mark Brown 2011-10-28  177  
f8beab2b Mark Brown 2011-10-28 @178  	irq_base = irq_alloc_descs(irq_base, 0, chip->num_irqs, 0);
f8beab2b Mark Brown 2011-10-28  179  	if (irq_base < 0) {
f8beab2b Mark Brown 2011-10-28  180  		dev_warn(map->dev, "Failed to allocate IRQs: %d\n",
f8beab2b Mark Brown 2011-10-28  181  			 irq_base);
f8beab2b Mark Brown 2011-10-28  182  		return irq_base;
f8beab2b Mark Brown 2011-10-28  183  	}
f8beab2b Mark Brown 2011-10-28  184  
f8beab2b Mark Brown 2011-10-28  185  	d = kzalloc(sizeof(*d), GFP_KERNEL);
f8beab2b Mark Brown 2011-10-28  186  	if (!d)
f8beab2b Mark Brown 2011-10-28  187  		return -ENOMEM;
f8beab2b Mark Brown 2011-10-28  188  
f8beab2b Mark Brown 2011-10-28  189  	d->status_buf = kzalloc(sizeof(unsigned int) * chip->num_regs,
f8beab2b Mark Brown 2011-10-28  190  				GFP_KERNEL);
f8beab2b Mark Brown 2011-10-28  191  	if (!d->status_buf)
f8beab2b Mark Brown 2011-10-28  192  		goto err_alloc;
f8beab2b Mark Brown 2011-10-28  193  
f8beab2b Mark Brown 2011-10-28  194  	d->status_reg_buf = kzalloc(map->format.val_bytes * chip->num_regs,
f8beab2b Mark Brown 2011-10-28  195  				    GFP_KERNEL);
f8beab2b Mark Brown 2011-10-28  196  	if (!d->status_reg_buf)
f8beab2b Mark Brown 2011-10-28  197  		goto err_alloc;
f8beab2b Mark Brown 2011-10-28  198  
f8beab2b Mark Brown 2011-10-28  199  	d->mask_buf = kzalloc(sizeof(unsigned int) * chip->num_regs,
f8beab2b Mark Brown 2011-10-28  200  			      GFP_KERNEL);
f8beab2b Mark Brown 2011-10-28  201  	if (!d->mask_buf)
f8beab2b Mark Brown 2011-10-28  202  		goto err_alloc;
f8beab2b Mark Brown 2011-10-28  203  
f8beab2b Mark Brown 2011-10-28  204  	d->mask_buf_def = kzalloc(sizeof(unsigned int) * chip->num_regs,
f8beab2b Mark Brown 2011-10-28  205  				  GFP_KERNEL);
f8beab2b Mark Brown 2011-10-28  206  	if (!d->mask_buf_def)
f8beab2b Mark Brown 2011-10-28  207  		goto err_alloc;
f8beab2b Mark Brown 2011-10-28  208  
f8beab2b Mark Brown 2011-10-28  209  	d->map = map;
f8beab2b Mark Brown 2011-10-28  210  	d->chip = chip;
f8beab2b Mark Brown 2011-10-28  211  	d->irq_base = irq_base;
f8beab2b Mark Brown 2011-10-28  212  	mutex_init(&d->lock);
f8beab2b Mark Brown 2011-10-28  213  
f8beab2b Mark Brown 2011-10-28  214  	for (i = 0; i < chip->num_irqs; i++)
f8beab2b Mark Brown 2011-10-28  215  		d->mask_buf_def[chip->irqs[i].reg_offset]
f8beab2b Mark Brown 2011-10-28  216  			|= chip->irqs[i].mask;
f8beab2b Mark Brown 2011-10-28  217  
f8beab2b Mark Brown 2011-10-28  218  	/* Mask all the interrupts by default */
f8beab2b Mark Brown 2011-10-28  219  	for (i = 0; i < chip->num_regs; i++) {
f8beab2b Mark Brown 2011-10-28  220  		d->mask_buf[i] = d->mask_buf_def[i];
f8beab2b Mark Brown 2011-10-28  221  		ret = regmap_write(map, chip->mask_base + i, d->mask_buf[i]);
f8beab2b Mark Brown 2011-10-28  222  		if (ret != 0) {
f8beab2b Mark Brown 2011-10-28  223  			dev_err(map->dev, "Failed to set masks in 0x%x: %d\n",
f8beab2b Mark Brown 2011-10-28  224  				chip->mask_base + i, ret);
f8beab2b Mark Brown 2011-10-28  225  			goto err_alloc;
f8beab2b Mark Brown 2011-10-28  226  		}
f8beab2b Mark Brown 2011-10-28  227  	}
f8beab2b Mark Brown 2011-10-28  228  
f8beab2b Mark Brown 2011-10-28  229  	/* Register them with genirq */
f8beab2b Mark Brown 2011-10-28  230  	for (cur_irq = irq_base;
f8beab2b Mark Brown 2011-10-28  231  	     cur_irq < chip->num_irqs + irq_base;
f8beab2b Mark Brown 2011-10-28  232  	     cur_irq++) {
f8beab2b Mark Brown 2011-10-28 @233  		irq_set_chip_data(cur_irq, d);
f8beab2b Mark Brown 2011-10-28  234  		irq_set_chip_and_handler(cur_irq, &regmap_irq_chip,
f8beab2b Mark Brown 2011-10-28 @235  					 handle_edge_irq);
f8beab2b Mark Brown 2011-10-28 @236  		irq_set_nested_thread(cur_irq, 1);
f8beab2b Mark Brown 2011-10-28  237  
f8beab2b Mark Brown 2011-10-28  238  		/* ARM needs us to explicitly flag the IRQ as valid
f8beab2b Mark Brown 2011-10-28  239  		 * and will set them noprobe when we do so. */
f8beab2b Mark Brown 2011-10-28  240  #ifdef CONFIG_ARM
f8beab2b Mark Brown 2011-10-28  241  		set_irq_flags(cur_irq, IRQF_VALID);
f8beab2b Mark Brown 2011-10-28  242  #else
f8beab2b Mark Brown 2011-10-28 @243  		irq_set_noprobe(cur_irq);
f8beab2b Mark Brown 2011-10-28  244  #endif
f8beab2b Mark Brown 2011-10-28  245  	}
f8beab2b Mark Brown 2011-10-28  246  

---
0-DAY kernel build testing backend              Open Source Technology Center
http://lists.01.org/mailman/listinfo/kbuild                 Intel Corporation

                 reply	other threads:[~2013-03-29  2:34 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20130329023426.GB9840@localhost \
    --to=fengguang.wu@intel.com \
    --cc=linux-s390@vger.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 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.