* [PATCH v2 0/2] fix drivers that consider 0 as a valid IRQ in client->irq @ 2015-06-05 12:41 ` Octavian Purdila 0 siblings, 0 replies; 8+ messages in thread From: Octavian Purdila @ 2015-06-05 12:41 UTC (permalink / raw) To: Linus Walleij Cc: Mika Westerberg, Jonathan Cameron, Hartmut Knaack, Lars-Peter Clausen, Peter Meerwald, Alessandro Zummo, Alexandre Belloni, Srinivas Pandruvada, linux-iio, rtc-linux, linux-kernel, Octavian Purdila Since patch "i2c / ACPI: Use 0 to indicate that device does not have interrupt assigned" [1], 0 is not a valid i2c client irq anymore, so change all driver's checks accordingly. The same issue occurs when the device is instantiated via device tree with no IRQ, or from the i2c sysfs interface, even before the patch above. [1] https://lkml.org/lkml/2015/5/6/279 Changes since v1: * remove the commit id as the referenced patch is not yet merged * rephrased the subject line to be more descriptive Octavian Purdila (2): iio: fix drivers that consider 0 as a valid IRQ in client->irq rtc: fix drivers that consider 0 as a valid IRQ in client->irq drivers/iio/accel/bmc150-accel.c | 2 +- drivers/iio/accel/kxcjk-1013.c | 2 +- drivers/iio/accel/mma9553.c | 2 +- drivers/iio/imu/kmx61.c | 8 ++++---- drivers/rtc/rtc-ds1374.c | 4 ++-- drivers/rtc/rtc-ds3232.c | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) -- 1.9.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [rtc-linux] [PATCH v2 0/2] fix drivers that consider 0 as a valid IRQ in client->irq @ 2015-06-05 12:41 ` Octavian Purdila 0 siblings, 0 replies; 8+ messages in thread From: Octavian Purdila @ 2015-06-05 12:41 UTC (permalink / raw) To: Linus Walleij Cc: Mika Westerberg, Jonathan Cameron, Hartmut Knaack, Lars-Peter Clausen, Peter Meerwald, Alessandro Zummo, Alexandre Belloni, Srinivas Pandruvada, linux-iio, rtc-linux, linux-kernel, Octavian Purdila Since patch "i2c / ACPI: Use 0 to indicate that device does not have interrupt assigned" [1], 0 is not a valid i2c client irq anymore, so change all driver's checks accordingly. The same issue occurs when the device is instantiated via device tree with no IRQ, or from the i2c sysfs interface, even before the patch above. [1] https://lkml.org/lkml/2015/5/6/279 Changes since v1: * remove the commit id as the referenced patch is not yet merged * rephrased the subject line to be more descriptive Octavian Purdila (2): iio: fix drivers that consider 0 as a valid IRQ in client->irq rtc: fix drivers that consider 0 as a valid IRQ in client->irq drivers/iio/accel/bmc150-accel.c | 2 +- drivers/iio/accel/kxcjk-1013.c | 2 +- drivers/iio/accel/mma9553.c | 2 +- drivers/iio/imu/kmx61.c | 8 ++++---- drivers/rtc/rtc-ds1374.c | 4 ++-- drivers/rtc/rtc-ds3232.c | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) -- 1.9.1 -- -- You received this message because you are subscribed to "rtc-linux". Membership options at http://groups.google.com/group/rtc-linux . Please read http://groups.google.com/group/rtc-linux/web/checklist before submitting a driver. --- You received this message because you are subscribed to the Google Groups "rtc-linux" group. To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/d/optout. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 1/2] iio: fix drivers that consider 0 as a valid IRQ in client->irq 2015-06-05 12:41 ` [rtc-linux] " Octavian Purdila @ 2015-06-05 12:41 ` Octavian Purdila -1 siblings, 0 replies; 8+ messages in thread From: Octavian Purdila @ 2015-06-05 12:41 UTC (permalink / raw) To: Linus Walleij Cc: Mika Westerberg, Jonathan Cameron, Hartmut Knaack, Lars-Peter Clausen, Peter Meerwald, Alessandro Zummo, Alexandre Belloni, Srinivas Pandruvada, linux-iio, rtc-linux, linux-kernel, Octavian Purdila Since patch "i2c / ACPI: Use 0 to indicate that device does not have interrupt assigned" [1], 0 is not a valid i2c client irq anymore, so change all driver's checks accordingly. The same issue occurs when the device is instantiated via device tree with no IRQ, or from the i2c sysfs interface, even before the patch above. [1] https://lkml.org/lkml/2015/5/6/279 Signed-off-by: Octavian Purdila <octavian.purdila@intel.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> --- drivers/iio/accel/bmc150-accel.c | 2 +- drivers/iio/accel/kxcjk-1013.c | 2 +- drivers/iio/accel/mma9553.c | 2 +- drivers/iio/imu/kmx61.c | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/iio/accel/bmc150-accel.c b/drivers/iio/accel/bmc150-accel.c index 4e70f51..55751d9 100644 --- a/drivers/iio/accel/bmc150-accel.c +++ b/drivers/iio/accel/bmc150-accel.c @@ -1663,7 +1663,7 @@ static int bmc150_accel_probe(struct i2c_client *client, if (client->irq < 0) client->irq = bmc150_accel_gpio_probe(client, data); - if (client->irq >= 0) { + if (client->irq > 0) { ret = devm_request_threaded_irq( &client->dev, client->irq, bmc150_accel_irq_handler, diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c index 0d9bd35..aa93cbd 100644 --- a/drivers/iio/accel/kxcjk-1013.c +++ b/drivers/iio/accel/kxcjk-1013.c @@ -1243,7 +1243,7 @@ static int kxcjk1013_probe(struct i2c_client *client, if (client->irq < 0) client->irq = kxcjk1013_gpio_probe(client, data); - if (client->irq >= 0) { + if (client->irq > 0) { ret = devm_request_threaded_irq(&client->dev, client->irq, kxcjk1013_data_rdy_trig_poll, kxcjk1013_event_handler, diff --git a/drivers/iio/accel/mma9553.c b/drivers/iio/accel/mma9553.c index 9d649c4..df043b3 100644 --- a/drivers/iio/accel/mma9553.c +++ b/drivers/iio/accel/mma9553.c @@ -1143,7 +1143,7 @@ static int mma9553_probe(struct i2c_client *client, if (client->irq < 0) client->irq = mma9553_gpio_probe(client); - if (client->irq >= 0) { + if (client->irq > 0) { ret = devm_request_threaded_irq(&client->dev, client->irq, mma9553_irq_handler, mma9553_event_handler, diff --git a/drivers/iio/imu/kmx61.c b/drivers/iio/imu/kmx61.c index 462a010..82cdf50 100644 --- a/drivers/iio/imu/kmx61.c +++ b/drivers/iio/imu/kmx61.c @@ -1363,7 +1363,7 @@ static int kmx61_probe(struct i2c_client *client, if (client->irq < 0) client->irq = kmx61_gpio_probe(client, data); - if (client->irq >= 0) { + if (client->irq > 0) { ret = devm_request_threaded_irq(&client->dev, client->irq, kmx61_data_rdy_trig_poll, kmx61_event_handler, @@ -1445,10 +1445,10 @@ err_iio_unregister_mag: err_iio_unregister_acc: iio_device_unregister(data->acc_indio_dev); err_buffer_cleanup_mag: - if (client->irq >= 0) + if (client->irq > 0) iio_triggered_buffer_cleanup(data->mag_indio_dev); err_buffer_cleanup_acc: - if (client->irq >= 0) + if (client->irq > 0) iio_triggered_buffer_cleanup(data->acc_indio_dev); err_trigger_unregister_motion: iio_trigger_unregister(data->motion_trig); @@ -1472,7 +1472,7 @@ static int kmx61_remove(struct i2c_client *client) iio_device_unregister(data->acc_indio_dev); iio_device_unregister(data->mag_indio_dev); - if (client->irq >= 0) { + if (client->irq > 0) { iio_triggered_buffer_cleanup(data->acc_indio_dev); iio_triggered_buffer_cleanup(data->mag_indio_dev); iio_trigger_unregister(data->acc_dready_trig); -- 1.9.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [rtc-linux] [PATCH v2 1/2] iio: fix drivers that consider 0 as a valid IRQ in client->irq @ 2015-06-05 12:41 ` Octavian Purdila 0 siblings, 0 replies; 8+ messages in thread From: Octavian Purdila @ 2015-06-05 12:41 UTC (permalink / raw) To: Linus Walleij Cc: Mika Westerberg, Jonathan Cameron, Hartmut Knaack, Lars-Peter Clausen, Peter Meerwald, Alessandro Zummo, Alexandre Belloni, Srinivas Pandruvada, linux-iio, rtc-linux, linux-kernel, Octavian Purdila Since patch "i2c / ACPI: Use 0 to indicate that device does not have interrupt assigned" [1], 0 is not a valid i2c client irq anymore, so change all driver's checks accordingly. The same issue occurs when the device is instantiated via device tree with no IRQ, or from the i2c sysfs interface, even before the patch above. [1] https://lkml.org/lkml/2015/5/6/279 Signed-off-by: Octavian Purdila <octavian.purdila@intel.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> --- drivers/iio/accel/bmc150-accel.c | 2 +- drivers/iio/accel/kxcjk-1013.c | 2 +- drivers/iio/accel/mma9553.c | 2 +- drivers/iio/imu/kmx61.c | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/iio/accel/bmc150-accel.c b/drivers/iio/accel/bmc150-accel.c index 4e70f51..55751d9 100644 --- a/drivers/iio/accel/bmc150-accel.c +++ b/drivers/iio/accel/bmc150-accel.c @@ -1663,7 +1663,7 @@ static int bmc150_accel_probe(struct i2c_client *client, if (client->irq < 0) client->irq = bmc150_accel_gpio_probe(client, data); - if (client->irq >= 0) { + if (client->irq > 0) { ret = devm_request_threaded_irq( &client->dev, client->irq, bmc150_accel_irq_handler, diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c index 0d9bd35..aa93cbd 100644 --- a/drivers/iio/accel/kxcjk-1013.c +++ b/drivers/iio/accel/kxcjk-1013.c @@ -1243,7 +1243,7 @@ static int kxcjk1013_probe(struct i2c_client *client, if (client->irq < 0) client->irq = kxcjk1013_gpio_probe(client, data); - if (client->irq >= 0) { + if (client->irq > 0) { ret = devm_request_threaded_irq(&client->dev, client->irq, kxcjk1013_data_rdy_trig_poll, kxcjk1013_event_handler, diff --git a/drivers/iio/accel/mma9553.c b/drivers/iio/accel/mma9553.c index 9d649c4..df043b3 100644 --- a/drivers/iio/accel/mma9553.c +++ b/drivers/iio/accel/mma9553.c @@ -1143,7 +1143,7 @@ static int mma9553_probe(struct i2c_client *client, if (client->irq < 0) client->irq = mma9553_gpio_probe(client); - if (client->irq >= 0) { + if (client->irq > 0) { ret = devm_request_threaded_irq(&client->dev, client->irq, mma9553_irq_handler, mma9553_event_handler, diff --git a/drivers/iio/imu/kmx61.c b/drivers/iio/imu/kmx61.c index 462a010..82cdf50 100644 --- a/drivers/iio/imu/kmx61.c +++ b/drivers/iio/imu/kmx61.c @@ -1363,7 +1363,7 @@ static int kmx61_probe(struct i2c_client *client, if (client->irq < 0) client->irq = kmx61_gpio_probe(client, data); - if (client->irq >= 0) { + if (client->irq > 0) { ret = devm_request_threaded_irq(&client->dev, client->irq, kmx61_data_rdy_trig_poll, kmx61_event_handler, @@ -1445,10 +1445,10 @@ err_iio_unregister_mag: err_iio_unregister_acc: iio_device_unregister(data->acc_indio_dev); err_buffer_cleanup_mag: - if (client->irq >= 0) + if (client->irq > 0) iio_triggered_buffer_cleanup(data->mag_indio_dev); err_buffer_cleanup_acc: - if (client->irq >= 0) + if (client->irq > 0) iio_triggered_buffer_cleanup(data->acc_indio_dev); err_trigger_unregister_motion: iio_trigger_unregister(data->motion_trig); @@ -1472,7 +1472,7 @@ static int kmx61_remove(struct i2c_client *client) iio_device_unregister(data->acc_indio_dev); iio_device_unregister(data->mag_indio_dev); - if (client->irq >= 0) { + if (client->irq > 0) { iio_triggered_buffer_cleanup(data->acc_indio_dev); iio_triggered_buffer_cleanup(data->mag_indio_dev); iio_trigger_unregister(data->acc_dready_trig); -- 1.9.1 -- -- You received this message because you are subscribed to "rtc-linux". Membership options at http://groups.google.com/group/rtc-linux . Please read http://groups.google.com/group/rtc-linux/web/checklist before submitting a driver. --- You received this message because you are subscribed to the Google Groups "rtc-linux" group. To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/d/optout. ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 2/2] rtc: fix drivers that consider 0 as a valid IRQ in client->irq 2015-06-05 12:41 ` [rtc-linux] " Octavian Purdila @ 2015-06-05 12:41 ` Octavian Purdila -1 siblings, 0 replies; 8+ messages in thread From: Octavian Purdila @ 2015-06-05 12:41 UTC (permalink / raw) To: Linus Walleij Cc: Mika Westerberg, Jonathan Cameron, Hartmut Knaack, Lars-Peter Clausen, Peter Meerwald, Alessandro Zummo, Alexandre Belloni, Srinivas Pandruvada, linux-iio, rtc-linux, linux-kernel, Octavian Purdila Since patch "i2c / ACPI: Use 0 to indicate that device does not have interrupt assigned" [1], 0 is not a valid i2c client irq anymore, so change all driver's checks accordingly. The same issue occurs when the device is instantiated via device tree with no IRQ, or from the i2c sysfs interface, even before the patch above. [1] https://lkml.org/lkml/2015/5/6/279 Signed-off-by: Octavian Purdila <octavian.purdila@intel.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com> --- drivers/rtc/rtc-ds1374.c | 4 ++-- drivers/rtc/rtc-ds3232.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/rtc/rtc-ds1374.c b/drivers/rtc/rtc-ds1374.c index 167783f..592458c 100644 --- a/drivers/rtc/rtc-ds1374.c +++ b/drivers/rtc/rtc-ds1374.c @@ -689,7 +689,7 @@ static int ds1374_suspend(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); - if (client->irq >= 0 && device_may_wakeup(&client->dev)) + if (client->irq > 0 && device_may_wakeup(&client->dev)) enable_irq_wake(client->irq); return 0; } @@ -698,7 +698,7 @@ static int ds1374_resume(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); - if (client->irq >= 0 && device_may_wakeup(&client->dev)) + if (client->irq > 0 && device_may_wakeup(&client->dev)) disable_irq_wake(client->irq); return 0; } diff --git a/drivers/rtc/rtc-ds3232.c b/drivers/rtc/rtc-ds3232.c index 7e48e53..f280dd1 100644 --- a/drivers/rtc/rtc-ds3232.c +++ b/drivers/rtc/rtc-ds3232.c @@ -443,7 +443,7 @@ static int ds3232_remove(struct i2c_client *client) { struct ds3232 *ds3232 = i2c_get_clientdata(client); - if (client->irq >= 0) { + if (client->irq > 0) { mutex_lock(&ds3232->mutex); ds3232->exiting = 1; mutex_unlock(&ds3232->mutex); -- 1.9.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [rtc-linux] [PATCH v2 2/2] rtc: fix drivers that consider 0 as a valid IRQ in client->irq @ 2015-06-05 12:41 ` Octavian Purdila 0 siblings, 0 replies; 8+ messages in thread From: Octavian Purdila @ 2015-06-05 12:41 UTC (permalink / raw) To: Linus Walleij Cc: Mika Westerberg, Jonathan Cameron, Hartmut Knaack, Lars-Peter Clausen, Peter Meerwald, Alessandro Zummo, Alexandre Belloni, Srinivas Pandruvada, linux-iio, rtc-linux, linux-kernel, Octavian Purdila Since patch "i2c / ACPI: Use 0 to indicate that device does not have interrupt assigned" [1], 0 is not a valid i2c client irq anymore, so change all driver's checks accordingly. The same issue occurs when the device is instantiated via device tree with no IRQ, or from the i2c sysfs interface, even before the patch above. [1] https://lkml.org/lkml/2015/5/6/279 Signed-off-by: Octavian Purdila <octavian.purdila@intel.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com> --- drivers/rtc/rtc-ds1374.c | 4 ++-- drivers/rtc/rtc-ds3232.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/rtc/rtc-ds1374.c b/drivers/rtc/rtc-ds1374.c index 167783f..592458c 100644 --- a/drivers/rtc/rtc-ds1374.c +++ b/drivers/rtc/rtc-ds1374.c @@ -689,7 +689,7 @@ static int ds1374_suspend(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); - if (client->irq >= 0 && device_may_wakeup(&client->dev)) + if (client->irq > 0 && device_may_wakeup(&client->dev)) enable_irq_wake(client->irq); return 0; } @@ -698,7 +698,7 @@ static int ds1374_resume(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); - if (client->irq >= 0 && device_may_wakeup(&client->dev)) + if (client->irq > 0 && device_may_wakeup(&client->dev)) disable_irq_wake(client->irq); return 0; } diff --git a/drivers/rtc/rtc-ds3232.c b/drivers/rtc/rtc-ds3232.c index 7e48e53..f280dd1 100644 --- a/drivers/rtc/rtc-ds3232.c +++ b/drivers/rtc/rtc-ds3232.c @@ -443,7 +443,7 @@ static int ds3232_remove(struct i2c_client *client) { struct ds3232 *ds3232 = i2c_get_clientdata(client); - if (client->irq >= 0) { + if (client->irq > 0) { mutex_lock(&ds3232->mutex); ds3232->exiting = 1; mutex_unlock(&ds3232->mutex); -- 1.9.1 -- -- You received this message because you are subscribed to "rtc-linux". Membership options at http://groups.google.com/group/rtc-linux . Please read http://groups.google.com/group/rtc-linux/web/checklist before submitting a driver. --- You received this message because you are subscribed to the Google Groups "rtc-linux" group. To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/d/optout. ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 2/2] rtc: fix drivers that consider 0 as a valid IRQ in client->irq 2015-06-05 12:41 ` [rtc-linux] " Octavian Purdila @ 2015-06-05 12:54 ` Alexandre Belloni -1 siblings, 0 replies; 8+ messages in thread From: Alexandre Belloni @ 2015-06-05 12:54 UTC (permalink / raw) To: Octavian Purdila Cc: Linus Walleij, Mika Westerberg, Jonathan Cameron, Hartmut Knaack, Lars-Peter Clausen, Peter Meerwald, Alessandro Zummo, Srinivas Pandruvada, linux-iio, rtc-linux, linux-kernel On 05/06/2015 at 15:41:58 +0300, Octavian Purdila wrote : > Since patch "i2c / ACPI: Use 0 to indicate that device does not have > interrupt assigned" [1], 0 is not a valid i2c client irq anymore, so > change all driver's checks accordingly. > > The same issue occurs when the device is instantiated via device tree > with no IRQ, or from the i2c sysfs interface, even before the patch > above. > > [1] https://lkml.org/lkml/2015/5/6/279 > lkml.org is not reliable and is currently losing messages. Like I suggested, you should use the redirector at https://lkml.kernel.org/ That would be http://lkml.kernel.org/g/<1430908148-201129-3-git-send-email-mika.westerberg@linux.intel.com> -- Alexandre Belloni, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 8+ messages in thread
* [rtc-linux] Re: [PATCH v2 2/2] rtc: fix drivers that consider 0 as a valid IRQ in client->irq @ 2015-06-05 12:54 ` Alexandre Belloni 0 siblings, 0 replies; 8+ messages in thread From: Alexandre Belloni @ 2015-06-05 12:54 UTC (permalink / raw) To: Octavian Purdila Cc: Linus Walleij, Mika Westerberg, Jonathan Cameron, Hartmut Knaack, Lars-Peter Clausen, Peter Meerwald, Alessandro Zummo, Srinivas Pandruvada, linux-iio, rtc-linux, linux-kernel On 05/06/2015 at 15:41:58 +0300, Octavian Purdila wrote : > Since patch "i2c / ACPI: Use 0 to indicate that device does not have > interrupt assigned" [1], 0 is not a valid i2c client irq anymore, so > change all driver's checks accordingly. > > The same issue occurs when the device is instantiated via device tree > with no IRQ, or from the i2c sysfs interface, even before the patch > above. > > [1] https://lkml.org/lkml/2015/5/6/279 > lkml.org is not reliable and is currently losing messages. Like I suggested, you should use the redirector at https://lkml.kernel.org/ That would be http://lkml.kernel.org/g/<1430908148-201129-3-git-send-email-mika.westerberg@linux.intel.com> -- Alexandre Belloni, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -- -- You received this message because you are subscribed to "rtc-linux". Membership options at http://groups.google.com/group/rtc-linux . Please read http://groups.google.com/group/rtc-linux/web/checklist before submitting a driver. --- You received this message because you are subscribed to the Google Groups "rtc-linux" group. To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/d/optout. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2015-06-05 12:54 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-06-05 12:41 [PATCH v2 0/2] fix drivers that consider 0 as a valid IRQ in client->irq Octavian Purdila 2015-06-05 12:41 ` [rtc-linux] " Octavian Purdila 2015-06-05 12:41 ` [PATCH v2 1/2] iio: " Octavian Purdila 2015-06-05 12:41 ` [rtc-linux] " Octavian Purdila 2015-06-05 12:41 ` [PATCH v2 2/2] rtc: " Octavian Purdila 2015-06-05 12:41 ` [rtc-linux] " Octavian Purdila 2015-06-05 12:54 ` Alexandre Belloni 2015-06-05 12:54 ` [rtc-linux] " Alexandre Belloni
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.